StreamProvider不更新列表(Firestore)

时间:2019-12-25 08:04:05

标签: flutter google-cloud-firestore provider

我已经在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())

我在这里想念什么?

1 个答案:

答案 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}")

现在,任何数据更改都会自动更新。