Flutter 弗拉特集团为许多集团共享国家
假设每次调用Api时我都要检查internet连接,如果没有internet,则调用时会抛出异常,如NoInternetException,然后向用户显示一个状态屏幕,告诉用户检查他们的连接Flutter 弗拉特集团为许多集团共享国家,flutter,dart,bloc,flutter-bloc,Flutter,Dart,Bloc,Flutter Bloc,假设每次调用Api时我都要检查internet连接,如果没有internet,则调用时会抛出异常,如NoInternetException,然后向用户显示一个状态屏幕,告诉用户检查他们的连接 如何在不为flatter\u bloc库中的每个bloc创建新状态的情况下实现这一点?您需要基类bloc,比如说他的名字“BaseBloc”,他将继承“bloc”类,并实现“maptostatevent”方法来处理“noInternet”异常,在调用方法之后,让我们说一下您创建的名为“internalMap
如何在不为
flatter\u bloc
库中的每个bloc创建新状态的情况下实现这一点?您需要基类bloc,比如说他的名字“BaseBloc”,他将继承“bloc”类,并实现“maptostatevent”方法来处理“noInternet”异常,在调用方法之后,让我们说一下您创建的名为“internalMapToStateEvent”,这个方法是override方法,它从“BaseBloc”继承了您的所有bloc类,您需要与页面相同的名称来绘制一个小部件“noInternetWidget”您可以在管理根页面(如身份验证页面和主页)的bloc中执行此操作
为无连接创建一个状态
NoConnectivity extends AuthenticationState{
final String message;
const NoConnectivity({ this.message });
}
现在为无连接创建一个事件
NoConnectivityEvent extends AuthenticationEvent{}
最后,在您的AuthenticationBloc
中创建一个StreamSubscription,以持续侦听connecitvityState
更改,如果状态为连接。无
我们将触发无连接
状态
class AuthenticationBloc
extends Bloc<AuthenticationEvent, AuthenticationState> {
StreamSubscription subscription;
@override
AuthenticationState get initialState => initialState();
@override
Stream<AuthenticationState> mapEventToState(
AuthenticationEvent event,
) async* {
// ... all other state map
else if(event is NoConnectivityEvent) {
yield* _mapNoConnectivityEventToState();
}
Stream<AuthenticationState> _mapNoConnectivityEventToState() async * {
subscription?.cancel();
//Edit to handle android internet connectivity.
subscription = Connectivity()
.onConnectivityChanged
.listen((ConnectivityResult result) {
if(Platform.isAndroid) {
try {
final lookupResult = InternetAddress.lookup('google.com');
if (lookupResult.isNotEmpty && lookupResult[0].rawAddress.isNotEmpty) {
print('connected');
}
} on SocketException catch (error) {
return add(NoConnectivityState(message: error.message ));
}
} else if(result == ConnectivityResult.none ) {
return add(NoConnectivityState(message: "Noconnection")) ;
}
print("Connected");
});
}
@override
Future<void> close() {
subscription?.cancel();
return super.close();
}
}
class AuthenticationBloc
扩展集团
希望有帮助 很好的解释!但是连接包在他们的存储库上说:注意,在Android上,这并不能保证连接到互联网。例如,该应用程序可能具有wifi访问权限,但可能是VPN或没有访问权限的酒店wifi。所以,这不是每次我从API调用时检查连接的最佳方法吗?太棒了!!非常感谢:)