flutter - 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 = [];
解决方案
检查这个包:
这是一个很棒的包/库,可以为您完成这项工作。要利用它,只需导入并执行以下示例:
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 类。
推荐阅读
- c# - 将 JSON 属性反序列化为不同的类属性
- javascript - 如何在 Alexa Developer Console 中解决“请求的技能响应有问题”
- vue.js - vue-router 不重定向
- php - 链接页面时添加扩展路径有什么好处和坏处
- wix-react-native-navigation - Wix React Native Navigation V2 使用更多屏幕初始化 Stack
- java - 为什么我的 sql 代码在结果集中无法正常运行
- java - 当使用与主键不同的列(referencedColumnName)映射关系时,如何阻止 Hibernate 急切地获取关系?
- java - 如何解决映射到非java文件类型文本的java文件
- c - 我正在尝试以 long long int 类型存储值,但返回错误
- reactjs - 如何使用反应导航将参数从 SplashScreen 传递到 HomeScreen?