【发布时间】:2020-01-28 04:10:20
【问题描述】:
我正在使用 Provider 向树深处的 Widget 公开一些参数。小部件是从 Streambuilder 构建的,即 Firebase 文档
但是,Provider 似乎没有公开正确的值
我的代码的一个非常简化的版本:
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:provider/provider.dart';
class Parameters {
Parameters(this.documentId);
final String documentId;
}
class Widget1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: mystream, //Query the Firebase for a bunch of Documents
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text('Error processing data feed');
}
switch (snapshot.connectionState) {
case ConnectionState.waiting:
{
return CircularProgressIndicator();
}
break;
default:
{
var _messages = snapshot.data.documents;
return ListView.builder(
itemCount: _messages.length,
itemBuilder: (context, index) {
return Provider<Parameters>(
builder: (context) =>
Parameters(_messages[index].documentID),
child: AnotherWidget());
});
}
}
});
}
}
class AnotherWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
Parameters param = Provider.of<Parameters>(context);
return Text(param.documentId);
}
}
第一次构建小部件时,这非常有效。但是,当插入新文档时,AnotherWidget 会显示上一个文档的文档 ID
更新流时如何获取正确的文档 ID?
注意:我知道我可以简单地将文档作为参数传递。但是我需要AnotherWidget的小部件树深处的参数
【问题讨论】:
标签: flutter google-cloud-firestore provider