Reputation: 17303
This implementation code is a simple Riverpod
provider which we can detect internet connection:
enum NetworkStatus { NotDetermined, On, Off }
final networkAwareProvider = StateNotifierProvider((ref)=>NetworkDetectorNotifier());
class NetworkDetectorNotifier extends StateNotifier<NetworkStatus> {
StreamController<ConnectivityResult> controller =
StreamController<ConnectivityResult>();
NetworkStatus lastResult = NetworkStatus.NotDetermined;
NetworkDetectorNotifier() : super(NetworkStatus.NotDetermined) {
Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
NetworkStatus newState;
switch (result) {
case ConnectivityResult.mobile:
case ConnectivityResult.wifi:
newState = NetworkStatus.On;
break;
case ConnectivityResult.none:
newState = NetworkStatus.Off;
break;
}
if (newState != state) {
state = newState;
}
});
}
}
here how can i dispose controller
and basically when we want to use that inside ConsumerWidget
we can have:
class Screen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Consumer(builder: (context, watch, child) {
var network = watch(networkAwareProvider).state;
if (network == NetworkStatus.Off) {
return Center(child: Text("No network"));
}
return Container(child: Text("Normal stuff"));
});
}
}
with Riverpod
kook how can use whatch
method in it? for example:
class Profile extends HookWidget {
@override
Widget build(BuildContext context) {
final _network = useProvider(networkAwareProvider);
final connected = _network.watch(networkAwareProvider).state;
if(connected){
print ('connected');
}else{
print ('not connected');
}
}
}
i get this error:
Class 'NetworkStatus' has no instance method 'watch'.
Receiver: Instance of 'NetworkStatus'
Tried calling: watch(Instance of 'StateNotifierProvider<NetworkDetectorNotifier, dynamic>')
thanks in advance
Upvotes: 0
Views: 1234
Reputation: 3875
useProvider
works the same way as ref.watch
, so you would just need to do:
final status = useProvider(networkAwareProvider);
if (status == ...) {
...
}
Upvotes: 1