Flutter:如何使用 Firestore 检查连接性
Posted
技术标签:
【中文标题】Flutter:如何使用 Firestore 检查连接性【英文标题】:Flutter : how to check connectivity using 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 = [];
【问题讨论】:
【参考方案1】:检查这个包:
Connectivity Flutter这是一个很棒的包/库,可以为您完成这项工作。要利用它,只需导入并执行以下示例:
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 访问权限,但它可能是 *** 或无法访问的酒店 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 有关吗?以上是关于Flutter:如何使用 Firestore 检查连接性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Flutter future<bool> 检查 Firestore 中是不是存在子集合
如何检查 Flutter Firestore 中是不是存在用户文档?
如何在 FireStore 中获取 isAdmin 字段并在 Flutter 中检查它是真还是假
检查 Flutter Firestore 中是不是已存在字段
如何使用 Firestore 在 Flutter 中搜索文本
无法构建flutter插件cloud_firestore,因为CloudFirestorePlugin.java使用未经检查或不安全的操作[flutter build apk]