我已经在Firestore中创建了名为users
的集合,并在其中添加了一些文档。
在Flutter的主要内容中,我已初始化StreamProvider
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
StreamProvider(create: (_) => Firestore.instance.collection('users').snapshots()),
ChangeNotifierProvider<UserStore>(create: (_) => UserStore()),
],
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MainPage(),
),
);
}
在我的小部件中,我想查看我的收藏夹中有多少个文档(用户)
StreamProvider<List<User>>.value(
value: streamUsers(), child: Text("${Provider.of<List<User>>(context).length}")),
我的streamUsers方法如下(将文档映射到文档列表)
Stream<List<User>> streamUsers() {
var ref = Firestore.instance.collection('users');
return ref.snapshots().map((list) => list.documents.map((doc) => User.fromFirestore(doc)).toList());
}
有一个明显的问题,Provider.of<List<User>>..
不能这样使用。同样在StreamProviders
初始化中,我相信我想念我的模型类型,但是我不知道如何将List<User>
放在那里,因为它必须是QuerySnapshot
的类型
StreamProvider<List<User>>(create: (_) => Firestore.instance.collection('users').snapshots())
我在这里想念什么?
答案 0 :(得分:0)
.. a,我找到了解决方法。
首先,对于创建StreamProvider
,我们这样做
StreamProvider<List<User>>(create: (_) => streamUsers()),
streamUsers
方法如下
Stream<List<User>> streamUsers() {
var ref = Firestore.instance.collection('users');
return ref.snapshots().map((list) => list.documents.map((doc) => User.fromFirestore(doc)).toList());
}
然后在我们的UI小部件中,我们只需调用Provider即可从数据集(List<User>
)中获取任何值。在这种情况下-只有长度。
Text("${Provider.of<List<User>>(context).length}")
现在,任何数据更改都会自动更新。