2017-12-26 23 views
0

데이터베이스에서 데이터를 가져올 때 위젯을 업데이트하려고합니다. 난 정말 더를 처음에 아무것도 렌더링 할 필요 널 그것을 떠나 것은하지 않기 때문에 나는 빈 컨테이너를 사용하지 않는거야상태가 업데이트되지 않습니다.

Widget openFriendRequestNotificationWidget = new Container(); 

: 나는 변경하기 위해 노력하고있어 위젯 클래스 변수로 정의된다 선택권.
내 페이지를 생성하는 두 가지 기능을 가지고와 한 다른 하나는 업데이트 내 openFriendRequestNotificationWidget :

Widget createFriendsPage() { 
    if (currentUser.friends == null) { 
     return new Column(
     mainAxisAlignment: MainAxisAlignment.center, 
     children: <Widget>[ 
      openFriendRequestNotificationWidget, 
      new Material(
       child: new InkWell(
       child: new Center(
        child: new Text("Woops, looks like you have no friends yet.\nTap here to find some!", textAlign: TextAlign.center,), 
       ), 
       onTap:() => createFriendsDialog(), 
      ) 
     ) 
     ], 
    ); 
    } 
    return new Column(
     children: <Widget>[ 
     openFriendRequestNotificationWidget, 
     new Text("ok") 
     ], 
    ); 
    } 

    void createReceivedFriendRequestsNotification() { 
    FirebaseDatabase.instance.reference().child("friend_requests").child(currentUser.uid).once().then((DataSnapshot snap) { 
     Map<String, Map<String, String>> response = snap.value; 
     if (response != null) { 
     this.setState(() { 
      print("Changing widget"); 
      openFriendRequestNotificationWidget = new Container(
      child: new Text("You've got ${response.length.toString()} new friend requests!"), 
      color: Colors.black, 
     ); 
     }); 
     } 
    }); 
    } 

변수는 createReceivedFriendRequestsNotification에 업데이트되지만 다시 렌더링되지 않습니다.
누군가 도와 줄 수 있습니까?

+0

https://github.com/flutter/flutter/issues/9614 – grepLines

+0

당신이'createFriendsPage()'를 호출 않는 재정의 메서드 내부에 createFriendsPage를 호출하는 것이 좋습니다? – grepLines

+0

감사합니다! 목록을 사용하는 열을 사용하기 때문에 목록을 변경하더라도 목록에 동일한 변수가 포함되어 있기 때문에 위젯이 다시 작성되지 않는다는 사실을 이해합니다 (잘못된 부분이 있으면 수정하십시오!). 어떻게 해결할 수 있을까요? 칼럼의 위젯 목록이 필요 하겠지? –

답변

1

initState()createFriendsPage을 호출하면 initState()의 코드가 한 번만 호출되므로 UI를 빌드한다는 의미입니다. 그것이 가능하면 , 난 당신이 build()

class FriendPage extends StatefullWidget{ 
      //instantiate your state .. } 

    class FriendsPageState extends State<FriendPage> { 
     @override 
     Widget build(Build context) { 
       return cteateFriendsPage(); 
     } 

     //other methods here ... 
    } 
+0

내 app 구조 때문에'createFriendsPage()'를 반환 할 수 없습니다. 그러나'initState()'에서 메소드를 호출하지 않는 것이 효과가있다! –