仅当我使用按钮更改状态时,StreamBuilder才会重新渲染数据

时间:2019-08-14 09:22:29

标签: flutter dart

我创建了一个StreamBuilder,该渲染器呈现一些从数据库服务器获取的消息。但是我必须更改屏幕或单击按钮或其他方式,以便它获取新添加的数据。这是必需的,因为我正在构建消息传递屏幕,并且我需要在发送数据后将其提取。 我遵循了使用所有if和else -s创建StreamBuilder的模式,所以我不知道应该在哪里刷新或setState。

编辑: 下面的代码位于一个StatefulWidget内部,也可以从另一个StatefulWidget调用,我不知道这是否有帮助。

 @override
  Widget build(BuildContext context) {
    MainModel model = Provider.of<MainModel>(context);
    return StreamBuilder<List<Message>>(
        stream: Stream.fromFuture(Provider.of<MainModel>(context)
            .fetchConversationMessages(
            Provider.of<MainModel>(context).selectedConversationId, context)),
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return Center(
              child: CircularProgressIndicator(),
            );
          }
           if (snapshot.hasError) {
            return Center(child: Text('${snapshot.error}'));
          }
           else if (snapshot.hasData) {
            return ListView.builder(
                reverse: true,
                itemCount: snapshot.data.length,
                itemBuilder: (context, index) {
                    return Container(
                      child: Row(
                        children: <Widget>[
                          Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: <Widget>[
                              Container(
                                child: Text(
                                  '${snapshot.data[snapshot.data.length - index - 1].messageBody}',
                                ),
                              )
                            ],
                          )
                        ],
                      ),
                    );

                });
          } 

0 个答案:

没有答案