都没有上述答案的建议。
来自此答案:
构建方法的设计方式应纯净/没有副作用。
和
在这意味着构建方法不应触发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
},
);
}
}