如何从Firestore获取实时更新,但请保持纯净的构建方法



来自此答案:

构建方法的设计方式应纯净/没有副作用。

这意味着构建方法不应触发HTTP调用或修改任何状态。

class BookList extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: Firestore.instance.collection('books').snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
      //  do something with books
      },
    );
  }
}

当调用build方法时,builder函数也来自StreamBuilder

我尝试的是:

...
stream: Firestore.instance.collection('books').snapshots().distinct(),
...

都没有上述答案的建议。

解决方案实际上是相同的:制作 StatefulWidget

class Foo extends StatefulWidget {
  @override
  _FooState createState() => _FooState();
}
class _FooState extends State<Foo> {
  Stream<QuerySnapshot> stream;
  @override
  void initState() {
    super.initState();
    stream = Firestore.instance.collection('books').snapshots();
  }
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: stream,
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        //  do something with books
      },
    );
  }
}

最新更新