我创建了一个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}',
),
)
],
)
],
),
);
});
}