I am trying to have stream provider for checking network connection, however it always return the same error.
"couldn't find the correct provider above your child widget.
I tried different structures but none work.
Edit: Stream provider and widget codes are added
This is my Main Page:
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
return ScreenUtilInit(
designSize: Size(411.429, 866.2857),
minTextAdapt: true,
splitScreenMode: true,
builder: (_) {
return MaterialApp(
useInheritedMediaQuery: true,
debugShowCheckedModeBanner: false,
theme: ThemeData(
textTheme: GoogleFonts.josefinSansTextTheme(
Theme.of(context).textTheme),
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity),
home: MultiProvider(
providers: [
StreamProvider<NetworkStatus?>(
initialData: null,
create: (context) =>
NetworkStatusService().networkStatusController.stream,
)
],
child: NetworkAwareWidget(
onlineChild: Container(
child: Text("A"),
),
offlineChild: Container(
child: Text("A"),
),
)
));
});
}
}
The provider Code:
enum NetworkStatus { Online, Offline }
class NetworkStatusService {
StreamController<NetworkStatus> networkStatusController =
StreamController<NetworkStatus>();
NetworkStatusService() {
Connectivity().onConnectivityChanged.listen((status) {
networkStatusController.add(_getNetworkStatus(status));
});
}
NetworkStatus _getNetworkStatus(ConnectivityResult status) {
return status == ConnectivityResult.mobile ||
status == ConnectivityResult.wifi
? NetworkStatus.Online
: NetworkStatus.Offline;
}
}
The Widget Code:
`lass NetworkAwareWidget extends StatelessWidget {
final Widget onlineChild;
final Widget offlineChild;
const NetworkAwareWidget(
{Key? key, required this.onlineChild, required
this.offlineChild})
: super(key: key);
@override
Widget build(BuildContext context) {
NetworkStatus networkStatus = Provider.of<NetworkStatus>
(context);
if (networkStatus == NetworkStatus.Online) {
print("Online");
return onlineChild;
} else {
print("Offline");
return offlineChild;
}
}
}