繁体   English   中英

如何使用Flutter StreamBuilder重试错误?

[英]How to retry on error with Flutter StreamBuilder?

我有一个StreamBuilder对象来呈现FireStore集合中的列表:

Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
    stream: Firestore.instance.collection('posts').snapshots(),
    builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
        switch (snapshot.connectionState) {
            default:
            return new ListView(
            children:
            snapshot.data.documents.map((DocumentSnapshot document) {
                return Post(document: document);
            }).toList());
        }
    });
}

我试图这样做,以便如果snapshot.hasError ,StreamBuilder再次尝试。 我怎样才能做到这一点?

通常,您应该始终将StreamBuilder与有状态窗口小部件结合使用。 否则,每次调用build方法时都会重新创建流。

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Stream<QuerySnapshot> postsStream;

  @override
  void initState() {
    super.initState();
    postsStream = Firestore.instance.collection('posts').snapshots();
  }

  void retryLoad() {
    setState(() {
      postsStream = Firestore.instance.collection('posts').snapshots();
    })
  }

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: postsStream,
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) {
          return RaisedButton(
            child: Text('Retry'),
            onPressed: retryLoad,
          );
        }
        // ...
      },
    );
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM