@@ -4,15 +4,12 @@ import 'package:connectivity/connectivity.dart';
44import 'package:flutter/widgets.dart' ;
55import 'package:flutter_offline/src/utils.dart' ;
66
7- const kOfflineDebounceDuration = const Duration (seconds: 3 );
8-
9- typedef Widget ConnectivityBuilder (
10- BuildContext context, ConnectivityResult connectivity, Widget child);
7+ const kOfflineDebounceDuration = Duration (seconds: 3 );
118
129class OfflineBuilder extends StatefulWidget {
1310 factory OfflineBuilder ({
1411 Key key,
15- @required ConnectivityBuilder connectivityBuilder,
12+ @required ValueWidgetBuilder < ConnectivityResult > connectivityBuilder,
1613 Duration debounceDuration = kOfflineDebounceDuration,
1714 WidgetBuilder builder,
1815 Widget child,
@@ -38,14 +35,10 @@ class OfflineBuilder extends StatefulWidget {
3835 this .builder,
3936 this .child,
4037 this .errorBuilder,
41- }) : assert (
42- connectivityBuilder != null , 'connectivityBuilder cannot be null' ),
38+ }) : assert (connectivityBuilder != null , 'connectivityBuilder cannot be null' ),
4339 assert (debounceDuration != null , 'debounceDuration cannot be null' ),
44- assert (
45- connectivityService != null , 'connectivityService cannot be null' ),
46- assert (
47- ! (builder is WidgetBuilder && child is Widget ) &&
48- ! (builder == null && child == null ),
40+ assert (connectivityService != null , 'connectivityService cannot be null' ),
41+ assert (! (builder is WidgetBuilder && child is Widget ) && ! (builder == null && child == null ),
4942 'You should specify either a builder or a child' ),
5043 super (key: key);
5144
@@ -56,7 +49,7 @@ class OfflineBuilder extends StatefulWidget {
5649 final Duration debounceDuration;
5750
5851 /// Used for building the Offline and/or Online UI
59- final ConnectivityBuilder connectivityBuilder;
52+ final ValueWidgetBuilder < ConnectivityResult > connectivityBuilder;
6053
6154 /// Used for building the child widget
6255 final WidgetBuilder builder;
@@ -78,37 +71,28 @@ class OfflineBuilderState extends State<OfflineBuilder> {
7871 void initState () {
7972 super .initState ();
8073
81- _connectivityStream = Stream .fromFuture (
82- widget.connectivityService.checkConnectivity (),
83- ).asyncExpand (
84- (ConnectivityResult data) {
85- return widget.connectivityService.onConnectivityChanged.transform (
86- startsWith (data),
87- );
88- },
89- ).transform (
90- debounce (widget.debounceDuration),
91- );
74+ _connectivityStream = Stream .fromFuture (widget.connectivityService.checkConnectivity ())
75+ .asyncExpand ((data) => widget.connectivityService.onConnectivityChanged.transform (startsWith (data)))
76+ .transform (debounce (widget.debounceDuration));
9277 }
9378
9479 @override
9580 Widget build (BuildContext context) {
9681 return StreamBuilder <ConnectivityResult >(
9782 stream: _connectivityStream,
98- builder: (
99- BuildContext context,
100- AsyncSnapshot <ConnectivityResult > snapshot,
101- ) {
102- final child = widget.child ?? widget.builder (context);
83+ builder: (BuildContext context, AsyncSnapshot <ConnectivityResult > snapshot) {
10384 if (! snapshot.hasData && ! snapshot.hasError) {
10485 return const SizedBox ();
105- } else if (snapshot.hasError) {
86+ }
87+
88+ if (snapshot.hasError) {
10689 if (widget.errorBuilder != null ) {
10790 return widget.errorBuilder (context);
10891 }
10992 throw OfflineBuilderError (snapshot.error);
11093 }
111- return widget.connectivityBuilder (context, snapshot.data, child);
94+
95+ return widget.connectivityBuilder (context, snapshot.data, widget.child ?? widget.builder (context));
11296 },
11397 );
11498 }
0 commit comments