还是先说问题👇
场景一:ios在首次安装app时会弹框提示用户是否授权网络,在用户没有授权之前,掉的接口都是失败的。这里会出现一个时间差,如果app没有做网络监听就会出现页面白屏的情况。所以需要监听网络变化(在此说明,我查阅了ios相关文档,用户点击操作之后是没有回调供开发者使用),状态从没有网络=》wifi/蜂窝的转变时重新掉接口刷新页面。
综上所述,我们要监听网络变化😭!但是我们有大佬前辈写的插件可以让我们看!!!! connectivity_plus
Connectivity
提供了一个onConnectivityChanged
的方法去实现网络监听,checkConnectivity
支持查询当前网络状态
解决方案:目前我支持的这个项目单纯的在首页监听网络变化,还是会出现接口调用失败的情况。在和产品沟通过后,我把网络判断直接放在开屏页之前,在用户没有点击授权网络之前就一直停留在开屏页,并提示用户去设置里开启网络授权。
import 'package:connectivity_plus/connectivity_plus.dart';
//onInit`里添加网络监听
state.connectivitySubscription = Connectivity().onConnectivityChanged.listen(updateConnectionStatus);
//onClose里移除监听
state.connectivitySubscription.cancel();
//在获取接口之前根据ConnectivityResult来判断,是否有网络
Future<void> updateConnectionStatus(ConnectivityResult result) async {
if (result != ConnectivityResult.none) {
//设置国家语言
await getCountryAndLanguage(null);
await getHomeAdvertiseList();
}
}
场景二:商品详情页,要给用户省流量。在非wifi网络下,视频不会自动播放。
如果不需要监听网络变化,只是需要获取当前是wifi还是移动网络
import 'package:connectivity_plus/connectivity_plus.dart';
Connectivity().checkConnectivity().then((connectivityResult) {
if (connectivityResult == ConnectivityResult.mobile) {
// I am connected to a mobile network.
} else if (connectivityResult == ConnectivityResult.wifi) {
// I am connected to a wifi network.
state.chewieController?.setVolume(0);
state.chewieController?.play();
}
});