【问题标题】:Flutter : how to check connectivity using firestoreFlutter:如何使用 Firestore 检查连接性
【发布时间】:2020-07-28 17:22:49
【问题描述】:

如何检查连接并仅在有互联网连接时显示图像,否则显示循环进度指示器。在我的以下代码中,即使没有互联网连接,指示器也只会出现一秒钟。

class About extends StatelessWidget {   
    List<Image> _listOfImages = <Image>[];
    @override
    Widget build(BuildContext context) {
    SizeConfig().init(context);
    return Scaffold(    
      body:     ListView(
        scrollDirection: Axis.vertical,
        children: <Widget>[
          Padding(
            padding: EdgeInsets.only(
                left: SizeConfig.safeBlockHorizontal * 5,
                top: SizeConfig.safeBlockHorizontal * 5,
                right: SizeConfig.safeBlockHorizontal * 5),
            child: Material(
              borderRadius: BorderRadius.circular(24.0),
              child: SizedBox(
                width: SizeConfig.safeBlockHorizontal * 80,
                height: SizeConfig.safeBlockHorizontal * 80,
                
                child: StreamBuilder<QuerySnapshot>(
                stream: Firestore.instance.collection('About').snapshots(),
   
                builder: (context, snapshot) {
                  if (snapshot.data.documents.length == 0){
                    return Center(
                        child: 
                                CircularProgressIndicator()
                      );                   
                  }
                   else {
                   return ListView.builder(
                      
                        itemCount: snapshot.data.documents.length,
                        itemBuilder: (BuildContext context, int index) {
                          _listOfImages = [];

【问题讨论】:

    标签: flutter google-cloud-firestore connectivity


    【解决方案1】:

    检查这个包:

    这是一个很棒的包/库,可以为您完成这项工作。要利用它,只需导入并执行以下示例:

          Future<bool> check() async {
            var connResult = await (Connectivity().checkConnectivity());
            if (connResult == ConnectivityResult.mobile) {
              return true;
            } else if (connResult == ConnectivityResult.wifi) {
              return true;
            }
            return false;
          }
    

    请注意,在 Android 上,这并不能保证连接到互联网。例如,该应用可能具有 wifi 访问权限,但它可能是 VPN 或无法访问的酒店 WiFi。

    替代用法

    主要思想是检查链接是否可以打开,在这种情况下我们使用google.com。然后,您可以返回您的 boolean 以根据该信息做您的工作。

    import 'dart:io'
    
    bool isConnected = false;
    // use try-catch to do this operation, so that to get the control over this 
    // operation better
    try{
      final result = await InternetAddress.lookup('google.com');
      if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
        // do the operation for connected, or change the bool to True for connected
        setState(() => isConnected = true);
      }
    } on SocketException catch (_) {
       setState(() => isConnected = false);
    }
    

    要了解更多InternetAddress,请关注:InternetAddress Class

    【讨论】:

    • @Aju 您可以将其添加到任何地方,但将其添加到您的initState() 会更好。从那里您可以通过一些bool value 获得您的connection status。然后在您调用API的地方,检查bool值,然后执行操作。希望这是有道理的
    • 对不起,我不明白。你能把它和我上面的代码联系起来吗?
    • 当互联网不存在@Aju 时你想发生什么?
    • if (snapshot.data.documents.length == 0){ return Center( child: CircularProgressIndicator() // 我要检查是否有连接,如果没有连接我要打印进度指示器 // ); } else { return ListView.builder // 否则我想打印这个小部件
    • 这与 Cloud Firestore 有关吗?
    猜你喜欢
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2020-04-17
    • 2019-07-27
    • 2022-11-05
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多