首页 > 解决方案 > Flutter:如何使用 Firestore 检查连接性

问题描述

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

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 = [];

标签: fluttergoogle-cloud-firestoreconnectivity

解决方案


检查这个包:

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

      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 上,这并不能保证连接到 Internet。例如,该应用程序可能具有 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 类


推荐阅读