Вы можете сделать это в блоке c, который управляет вашими root страницами, такими как authentication_page и домашняя страница.
Создайте state
для noConnectivity.
NoConnectivity extends AuthenticationState{
final String message;
const NoConnectivity({ this.message });
}
Теперь создайте event
для noConnectivity.
NoConnectivityEvent extends AuthenticationEvent{}
Наконец, создайте StreamSubscription в своем AuthenticationBloc
для непрерывного прослушивания изменений connecitvityState
, и если состояние connectivity.none
мы вызовем состояние NoConnecitivity
.
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();
}
}
Этот поток подписки будет вечно слушать no connection
и sh соответствующую страницу, которая вам нравится в штате.
Необходимые пакеты
rxdart
подключение
Надеюсь, это поможет!