firebase - 如何在没有导航和 Firebase 的情况下刷新 StreamBuilder - Flutter
问题描述
目前我的代码可以工作,但我必须每 5 秒向 API 发出一次请求,以刷新视图并查看数据中是否发生了任何更改。
我的目的是它检测数据是否有任何变化,以便更新视图,我没有使用 firebase,也没有尝试导航到另一个屏幕。
class _ListChatsState extends State<ListChats> {
final GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();
final messagesProvider = new ServiceMessagesAdm();
Timer _timer;
@override
void initState() {
//messagesProvider.getMessagesAdm();
//Check the server every 5 seconds
_timer = Timer.periodic(Duration(seconds: 5), (timer) => messagesProvider.getMessagesAdm());
super.initState();
}
@override
void dispose() {
//cancel the timer
if (_timer.isActive) _timer.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
key: scaffoldKey,
appBar: new AppBar(
title: new Text('StreamBuilder'),
actions: <Widget>[
],
),
body: FutureBuilder(
future: messagesProvider.getMessagesAdm(),
builder: (BuildContext context, AsyncSnapshot<List> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
print("ESTOY EN NONE");
return image();
break;
case ConnectionState.waiting:
return Center(
child: CircularProgressIndicator(),
);
break;
case ConnectionState.active:
return _buildListView(snapshot.data);
break;
case ConnectionState.done:
// TODO: Handle this case.
break;
}
return image();
},
),
);
}
Future<List<MessagesAdm>> getMessagesAdm() async {
final respuesta = await http.get(url);
List<MessagesAdm> _list;
var resBody = json.decode(respuesta.body);
print(respuesta.body);
var capsules = resBody as List;
_list = capsules.map((model) => MessagesAdm.fromJson(model)).toList();
//print(_list);
popularesSink( _list );
return _list;
}
有没有办法检测 API 中是否有任何变化?我在聊天。
在我使用这些代码行之前.. 但他们没有检测到更改,对我来说,重要的是告诉你这些更改是从邮递员那里应用的。在代码中,我可以发出任何触发这些流的通知吗?我留下之前使用的代码行。
class ServiceMessagesAdm {
Loads loads;
final _popularesStreamController = StreamController<List<MessagesAdm>>.broadcast();
Function(List<MessagesAdm>) get popularesSink => _popularesStreamController.sink.add;
Stream<List<MessagesAdm>> get popularesStream => _popularesStreamController.stream;
void disposeStreams() {
_popularesStreamController?.close();
}
}
解决方案
推荐阅读
- django - 我似乎无法让 Docker-Nginx-Django 应用程序刷新静态文件
- solr - 未知形状定义 [CIRCLE]
- sql-server - SQL Server 命令元数据 - 用于审核的自定义文本
- c# - 查询未返回实体
- flutter - 颤振自定义油漆响应问题
- jquery - 如果登录会话在 laravel 应用程序中过期,jQuery 如何捕获?
- redux - 仅当从 redux 中间件中删除记录器时,Recharts 工具提示才会崩溃
- php - 如何添加日期并打印某一天的所有结果?
- php - JQUERY AJAX 调用返回 PHP 页面内容
- webhooks - Stripe webhook,当支付的产品不是订阅而是一次性付款时,我如何才能收到 PRICE 项目?