Flutter 颤振-如何在从另一个类接收的数据上刷新ListView
我从datareciver侦听器接收数据并将其添加到对象列表中,但无法从其他类上载listview。因此,当接收到数据时,listview有一个监听器可以更新 我把我所有的类和代码 ContentModel.dart-哪一个是我的模型Flutter 颤振-如何在从另一个类接收的数据上刷新ListView,flutter,listview,refresh,Flutter,Listview,Refresh,我从datareciver侦听器接收数据并将其添加到对象列表中,但无法从其他类上载listview。因此,当接收到数据时,listview有一个监听器可以更新 我把我所有的类和代码 ContentModel.dart-哪一个是我的模型 class ContentModel{ String dialogID; DialogModel(this.dialogID); } Global.dart--存储列表的全局类 class Globals { static List&
class ContentModel{
String dialogID;
DialogModel(this.dialogID);
}
Global.dart--存储列表的全局类
class Globals {
static List<ContentModel> dialogList =new List<ContentModel>();
}
类全局变量{
静态列表对话框列表=新建列表();
}
main.dart--接收列表时显示列表的主视图
List<ContentModel> _contentModel = Globals.dialogList;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child:ListView.builder(
padding: EdgeInsets.symmetric(horizontal: 12.0),
itemCount:_contentModel.length,
reverse: false,
controller: _scrollController,
itemBuilder: (BuildContext context, index) =>
buildChat(_contentModel[index]))
));
}
List\u contentModel=Globals.dialogList;
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
子项:ListView.builder(
填充:边缘组。对称(水平:12.0),
itemCount:\u contentModel.length,
反面:错,
控制器:\ u滚动控制器,
itemBuilder:(构建上下文,索引)=>
buildChat(_contentModel[index]))
));
}
dart——数据接收器可以接收任何时间并将其保存在全局列表中
class QuickBloxListenerManager{
onMassageRecive(Function fun) async
{
try {
await QB.chat.subscribeChatEvent(QBChatEvents.RECEIVED_NEW_MESSAGE,
(data) {
print( "New Message Arrive...");
Map<String, Object> map = new Map<String, dynamic>.from(data);
Map<String, Object> payload =
new Map<String, dynamic>.from(map["payload"]);
ContentModel newMsg = new ContentModel();
newMsg.dialogID=payload['id'];
Globals.messageList.messages.add(newMsg);
}, onErrorMethod: (error) {
});
} on PlatformException catch (e) {
}
}
}
类QuickBloxListenerManager{
onMassageRecive(函数fun)异步
{
试一试{
等待QB.chat.subscribeChatEvent(QBChatEvents.RECEIVED_NEW_消息,
(数据){
打印(“新邮件到达…”);
地图地图=新地图。从(数据);
地图有效载荷=
新地图。从(地图[“有效载荷]);
ContentModel newMsg=新ContentModel();
newMsg.dialogID=payload['id'];
Globals.messageList.messages.add(newMsg);
},onErrorMethod:(错误){
});
}平台上异常捕获(e){
}
}
}
您可以查看,这是颤振应用程序中非常常见的小部件,用于根据数据更改更新UI。
在这种情况下,您可以像这样实现应用程序的流程:
导入'dart:async';
类QuickBloxListenerManager{
最终_controller=StreamController();
Stream contentModelStream=>\u controller.Stream;
//…其他线路
}
onMassageRecive()异步{
试一试{
//…其他线路
newMsg.dialogID=payload['id'];
//在这里,我看到您引用了dialogList,所以我将在代码中使用该列表
Globals.dialogList.add(newMsg);
_controller.add(Globals.dialogList);
//…其他线路
}
class SomeScreen扩展StatefulWidget{
//…其他线路
//启动QuickBloxListenerManager类
最终QuickBloxListenerManager _manager=QuickBloxListenerManager();
//在initState()中获取数据
@凌驾
initState(){
super.initState();
_manager.onmassagericive();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
孩子:StreamBuilder(
流:_manager.contentModelStream,
生成器:(上下文,快照){
如果(!snapshot.hasData)返回容器();
列表_contentModel=snapshot.data;
返回ListView.builder(
填充:边缘组。对称(水平:12.0),
itemCount:\u contentModel.length,
反面:错,
控制器:\ u滚动控制器,
itemBuilder:(构建上下文,索引)=>
buildChat(_contentModel[index]))
)
);
}
);
}
}
感谢您提供了清晰而有用的答案。