flutter - 如何使用 BLoC 模式实时显示 Firebase 列表?
问题描述
我有一个 TODO 列表功能(Alarmas),但我觉得我没有充分利用 Firebase 的实时功能。
小部件很好地显示了列表,但是当有人从另一部手机放置新任务时,我无法自动显示它,但我必须通过单击底部导航栏中的“TODO 按钮”再次调用构建。
有没有一种方法可以自动显示新任务而无需执行任何操作?
我正在使用 BLOC 模式和提供程序通过流获取数据...
@override
Widget build(BuildContext context) {
alarmaBloc.cargarAlarmas();
///---Scaffold and others
return StreamBuilder(
stream: alarmaBloc.alarmasStream,
builder: (BuildContext context, AsyncSnapshot<List<AlarmaModel>> snapshot){
if (snapshot.hasData) {
final tareasList = snapshot.data;
if (tareasList.length == 0) return _imagenInicial(context);
return ListView(
children: [
for (var itemPendiente in tareasList)
_crearItem(context, alarmaBloc, itemPendiente),
//more widgets
],
);
} else if (snapshot.hasError) {
return Text(snapshot.error.toString());
}
return Center (child: Image(image: AssetImage('Preloader.gif'), height: 200.0,));
},
),
@puf 在如何实时显示 Firebase 列表中发布了一个解决方案?使用 setState,但我不知道如何实现它,因为我无法在 BLoC 模式页面中使用 setState。
更新
我的 BLoC 模式看起来像这样......
class AlarmaBloc {
final _alarmaController = new BehaviorSubject<List<AlarmaModel>>();
final _alarmaProvider = new AlarmaProvider();
Stream <List<AlarmaModel>> get alarmasStream => _alarmaController.stream;
Future<List<AlarmaModel>> cargarAlarmas() async {
final alarmas = await _alarmaProvider.cargarAlarmas();
_alarmaController.sink.add(alarmas);
return alarmas;
}
//---
dispose() {
_alarmaController?.close();
}
我的 PROVIDER 看起来像这样......
Future<List<AlarmaModel>> cargarAlarmas() async {
final List<AlarmaModel> alarmaList = new List();
Query resp = db.child('alarmas');
resp.onChildAdded.forEach((element) {
print('Provider - Nuevo onChild Alarma ${element.snapshot.value['fecha']} - ${element.snapshot.value['nombreRefEstanque']} - ${element.snapshot.value['pesoPromedio']}}');
final temp = AlarmaModel.fromJson(Map<String,dynamic>.from(element.snapshot.value));
temp.idAlarma = element.snapshot.key;
alarmaList.add(temp); // element.snapshot.value.
});
await resp.once().then((snapshot) {
print("Las Alarmas se cargaron totalmente - ${alarmaList.length}");
});
return alarmaList;
如何使用 BLoC 模式在“真实”实时中显示来自 Firebase 的列表?
解决方案
推荐阅读
- django-forms - 渲染 HTML 时删除所需的 attr
- react-native - Android 'react-native-gesture-handler' 错误
- python - 如何在多进程共享数组中从 lmfit 传递 ModelResult 类?
- r - 如何在 R 中将列名的编码更改为 utf 8
- python - 在 python 中,如何在 api 端点的 { 之前添加一个 $ 符号
- r - 使用新数据集在 purrr::map 之后从 glm 模型预测概率
- sorting - Kotlin 中的比较器解释
- php - 使用 API PHP 创建带有图像和价格的 Shopify 产品
- java - jose4j 是否自动处理 Azure 签名密钥翻转?
- laravel - 如何在 laravel 控制器中获取转发 url?