diff --git a/CHANGELOG.md b/CHANGELOG.md index d946923..ce97098 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ -# 0.0.5+11 +# 0.0.6+13 -* Added callback method when online -* Added callback method when offline -* Updated readme +* Added Offline screen on top of all widgets +* Use the widget only once for the entire app life cycle +* Updated default lookup url to github.com diff --git a/example/lib/main.dart b/example/lib/main.dart index db65986..8bad69c 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_no_internet_widget/flutter_no_internet_widget.dart'; +import 'package:no_internet_widget_example/second_screen.dart'; void main() { runApp(const MyApp()); @@ -11,12 +12,20 @@ class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - primarySwatch: Colors.blue, + return InternetWidget( + offline: const Center(child: Text('No Internet')), + // ignore: avoid_print + whenOffline: () => print('No Internet'), + // ignore: avoid_print + whenOnline: () => print('Connected to internet'), + loadingWidget: const Center(child: Text('Loading')), + online: MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + primarySwatch: Colors.blue, + ), + home: const MyHomePage(title: 'Flutter Demo Home Page'), ), - home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } } @@ -41,38 +50,39 @@ class _MyHomePageState extends State { @override Widget build(BuildContext context) { return Center( - child: InternetWidget( - offline: const Scaffold( - body: Center(child: Text('No Internet')), + child: Scaffold( + appBar: AppBar( + title: Text(widget.title), ), - // ignore: avoid_print - whenOffline: () => print('No Internet'), - online: Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text( - 'You have pushed the button this many times:', - ), - Text( - '$_counter', - style: Theme.of(context).textTheme.headline4, - ), - ], - ), - ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'You have pushed the button this many times:', + ), + Text( + '$_counter', + style: Theme.of(context).textTheme.headline4, + ), + ElevatedButton( + onPressed: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => const SecondScreen(), + ), + ); + }, + child: const Text('Navigate'), + ) + ], ), ), - // ignore: avoid_print - whenOnline: () => print('Connected to internet'), + floatingActionButton: FloatingActionButton( + onPressed: _incrementCounter, + tooltip: 'Increment', + child: const Icon(Icons.add), + ), ), ); } diff --git a/example/lib/second_screen.dart b/example/lib/second_screen.dart new file mode 100644 index 0000000..617213b --- /dev/null +++ b/example/lib/second_screen.dart @@ -0,0 +1,15 @@ +import 'package:flutter/material.dart'; + +class SecondScreen extends StatelessWidget { + const SecondScreen({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Second Screen'), + ), + body: const Center(child: Text('Second Screen')), + ); + } +} diff --git a/lib/src/_cubit/internet_cubit.dart b/lib/src/_cubit/internet_cubit.dart index 53dab58..3adc166 100644 --- a/lib/src/_cubit/internet_cubit.dart +++ b/lib/src/_cubit/internet_cubit.dart @@ -64,7 +64,7 @@ class InternetCubit extends Cubit { ///Internet State cubit InternetCubit({ Connectivity? connectivity, - this.urlLookup = 'example.com', + this.urlLookup = 'github.com', }) : super(const InternetState()) { this.connectivity = connectivity ?? Connectivity(); _init(); @@ -142,7 +142,7 @@ class InternetCubit extends Cubit { } Future> _lookupAddress() async { - final _lookupUrl = urlLookup ?? 'example.com'; + final _lookupUrl = urlLookup ?? 'github.com'; final _internetAddress = await InternetAddress.lookup( _lookupUrl, ); diff --git a/lib/src/flutter_no_internet_widget.dart b/lib/src/flutter_no_internet_widget.dart index c82e3c9..e96165e 100644 --- a/lib/src/flutter_no_internet_widget.dart +++ b/lib/src/flutter_no_internet_widget.dart @@ -68,39 +68,41 @@ class InternetWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return ResponsiveSizer( - builder: (context, orientation, screenType) { - return BlocProvider( - create: (context) => InternetCubit( - urlLookup: lookupUrl, - ), - child: Scaffold( - body: Builder( - builder: (_) { - return BlocBuilder( - builder: (_, state) { - if (state.cubitStatus == CubitStatus.busy) { - if (loadingWidget != null) { - return loadingWidget!; + return MaterialApp( + home: ResponsiveSizer( + builder: (context, orientation, screenType) { + return BlocProvider( + create: (context) => InternetCubit( + urlLookup: lookupUrl, + ), + child: Scaffold( + body: Builder( + builder: (_) { + return BlocBuilder( + builder: (_, state) { + if (state.cubitStatus == CubitStatus.busy) { + if (loadingWidget != null) { + return loadingWidget!; + } + return const Center( + child: CircularProgressIndicator(), + ); } - return const Center( - child: CircularProgressIndicator(), + return SizedBox( + width: width ?? 100.0.w, + height: height ?? 100.0.h, + child: state.internetStatus == InternetStatus.connected + ? _getOnlineWidget() + : _getOfflineWidget(), ); - } - return SizedBox( - width: width ?? 100.0.w, - height: height ?? 100.0.h, - child: state.internetStatus == InternetStatus.connected - ? _getOnlineWidget() - : _getOfflineWidget(), - ); - }, - ); - }, + }, + ); + }, + ), ), - ), - ); - }, + ); + }, + ), ); } diff --git a/pubspec.yaml b/pubspec.yaml index ebf62ff..5d4c139 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_no_internet_widget description: A new Flutter widget to show online or offline widget without any extra code or dependencies. -version: 0.0.5+11 +version: 0.0.6+13 homepage: https://github.com/NaagAlgates/flutter_no_internet_widget environment: