代码之家  ›  专栏  ›  技术社区  ›  Aurimas Deimantas

StreamProvider不更新列表(Firestore)

  •  0
  • Aurimas Deimantas  · 技术社区  · 5 年前

    我在Firestore中创建了一个名为 users 在里面加了几个文件。 在颤振的主要,我已经初始化 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 回复  |  直到 5 年前
        1
  •  0
  •   Blasanka    5 年前

    …我找到了解决办法。

    首先,创建一个 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}")