Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 弗拉特集团为许多集团共享国家_Flutter_Dart_Bloc_Flutter Bloc - Fatal编程技术网

Flutter 弗拉特集团为许多集团共享国家

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

假设每次调用Api时我都要检查internet连接,如果没有internet,则调用时会抛出异常,如NoInternetException,然后向用户显示一个状态屏幕,告诉用户检查他们的连接


如何在不为
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调用时检查连接的最佳方法吗?太棒了!!非常感谢:)