Skip to content

Commit cb465f5

Browse files
authored
v2.0 #40
2 parents e2e80ad + 1c48074 commit cb465f5

12 files changed

Lines changed: 77 additions & 123 deletions

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## [2.0.0]
2+
3+
- Migrate to null-safety
4+
15
## [1.0.0]
26

37
- Improve network and wifi detection

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ A tidy utility to handle offline/online connectivity like a Boss. It provides su
88

99
```yaml
1010
dependencies:
11-
flutter_offline: "^1.0.0"
11+
flutter_offline: "^2.0.0"
1212
```
1313
1414
### ⚡️ Import
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"connectivity","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/connectivity-2.0.2/","dependencies":[]},{"name":"wifi_info_flutter","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/wifi_info_flutter-1.0.4/","dependencies":[]}],"android":[{"name":"connectivity","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/connectivity-2.0.2/","dependencies":[]},{"name":"wifi_info_flutter","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/wifi_info_flutter-1.0.4/","dependencies":[]}],"macos":[{"name":"connectivity_macos","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/connectivity_macos-0.1.0+7/","dependencies":[]}],"linux":[],"windows":[],"web":[{"name":"connectivity_for_web","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/connectivity_for_web-0.3.1+4/","dependencies":[]}]},"dependencyGraph":[{"name":"connectivity","dependencies":["connectivity_macos","connectivity_for_web"]},{"name":"connectivity_for_web","dependencies":[]},{"name":"connectivity_macos","dependencies":[]},{"name":"wifi_info_flutter","dependencies":[]}],"date_created":"2021-03-05 06:20:56.934344","version":"2.1.0-10.0.pre"}
1+
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"connectivity","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/connectivity-3.0.2/","dependencies":[]},{"name":"wifi_info_flutter","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/wifi_info_flutter-2.0.0/","dependencies":[]}],"android":[{"name":"connectivity","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/connectivity-3.0.2/","dependencies":[]},{"name":"wifi_info_flutter","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/wifi_info_flutter-2.0.0/","dependencies":[]}],"macos":[{"name":"connectivity_macos","path":"/Users/jogboms/flutter/.pub-cache/hosted/pub.dartlang.org/connectivity_macos-0.2.0/","dependencies":[]}],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"connectivity","dependencies":["connectivity_macos"]},{"name":"connectivity_macos","dependencies":[]},{"name":"wifi_info_flutter","dependencies":[]}],"date_created":"2021-03-05 06:49:22.633197","version":"2.1.0-10.0.pre"}

example/lib/demo_page.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import 'package:flutter/material.dart';
22

33
class DemoPage extends StatelessWidget {
44
const DemoPage({
5-
Key key,
6-
@required this.child,
5+
Key? key,
6+
required this.child,
77
}) : super(key: key);
88

99
final Widget child;

example/pubspec.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ version: 1.0.0+1
55
publish_to: none
66

77
environment:
8-
sdk: ">=2.0.0 <3.0.0"
8+
sdk: '>=2.12.0 <3.0.0'
9+
flutter: ">=2.0.0"
910

1011
dependencies:
1112
flutter:
@@ -16,7 +17,7 @@ dependencies:
1617
dev_dependencies:
1718
flutter_test:
1819
sdk: flutter
19-
pedantic: ^1.9.0
20+
pedantic: ^1.11.0
2021

2122
flutter:
2223
uses-material-design: true

lib/src/main.dart

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@ import 'package:flutter_offline/src/utils.dart';
66
import 'package:wifi_info_flutter/wifi_info_flutter.dart';
77

88
const kOfflineDebounceDuration = Duration(seconds: 3);
9+
typedef ValueWidgetBuilder<T> = Widget Function(BuildContext context, T value, Widget child);
910

1011
class OfflineBuilder extends StatefulWidget {
1112
factory OfflineBuilder({
12-
Key key,
13-
@required ValueWidgetBuilder<ConnectivityResult> connectivityBuilder,
13+
Key? key,
14+
required ValueWidgetBuilder<ConnectivityResult> connectivityBuilder,
1415
Duration debounceDuration = kOfflineDebounceDuration,
15-
WidgetBuilder builder,
16-
Widget child,
17-
WidgetBuilder errorBuilder,
16+
WidgetBuilder? builder,
17+
Widget? child,
18+
WidgetBuilder? errorBuilder,
1819
}) {
1920
return OfflineBuilder.initialize(
2021
key: key,
@@ -23,25 +24,22 @@ class OfflineBuilder extends StatefulWidget {
2324
wifiInfo: WifiInfo(),
2425
debounceDuration: debounceDuration,
2526
builder: builder,
26-
child: child,
2727
errorBuilder: errorBuilder,
28+
child: child,
2829
);
2930
}
3031

3132
@visibleForTesting
3233
OfflineBuilder.initialize({
33-
Key key,
34-
@required this.connectivityBuilder,
35-
@required this.connectivityService,
36-
@required this.wifiInfo,
34+
Key? key,
35+
required this.connectivityBuilder,
36+
required this.connectivityService,
37+
required this.wifiInfo,
3738
this.debounceDuration = kOfflineDebounceDuration,
3839
this.builder,
3940
this.child,
4041
this.errorBuilder,
41-
}) : assert(connectivityBuilder != null, 'connectivityBuilder cannot be null'),
42-
assert(debounceDuration != null, 'debounceDuration cannot be null'),
43-
assert(connectivityService != null, 'connectivityService cannot be null'),
44-
assert(!(builder is WidgetBuilder && child is Widget) && !(builder == null && child == null),
42+
}) : assert(!(builder is WidgetBuilder && child is Widget) && !(builder == null && child == null),
4543
'You should specify either a builder or a child'),
4644
super(key: key);
4745

@@ -57,20 +55,20 @@ class OfflineBuilder extends StatefulWidget {
5755
final ValueWidgetBuilder<ConnectivityResult> connectivityBuilder;
5856

5957
/// Used for building the child widget
60-
final WidgetBuilder builder;
58+
final WidgetBuilder? builder;
6159

6260
/// The widget below this widget in the tree.
63-
final Widget child;
61+
final Widget? child;
6462

6563
/// Used for building the error widget incase of any platform errors
66-
final WidgetBuilder errorBuilder;
64+
final WidgetBuilder? errorBuilder;
6765

6866
@override
6967
OfflineBuilderState createState() => OfflineBuilderState();
7068
}
7169

7270
class OfflineBuilderState extends State<OfflineBuilder> {
73-
Stream<ConnectivityResult> _connectivityStream;
71+
late Stream<ConnectivityResult> _connectivityStream;
7472

7573
@override
7674
void initState() {
@@ -92,12 +90,12 @@ class OfflineBuilderState extends State<OfflineBuilder> {
9290

9391
if (snapshot.hasError) {
9492
if (widget.errorBuilder != null) {
95-
return widget.errorBuilder(context);
93+
return widget.errorBuilder!(context);
9694
}
97-
throw OfflineBuilderError(snapshot.error);
95+
throw OfflineBuilderError(snapshot.error!);
9896
}
9997

100-
return widget.connectivityBuilder(context, snapshot.data, widget.child ?? widget.builder(context));
98+
return widget.connectivityBuilder(context, snapshot.data!, widget.child ?? widget.builder!(context));
10199
},
102100
);
103101
}

lib/src/utils.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ StreamTransformer<ConnectivityResult, ConnectivityResult> debounce(
66
Duration debounceDuration,
77
) {
88
var _seenFirstData = false;
9-
Timer _debounceTimer;
9+
Timer? _debounceTimer;
1010

1111
return StreamTransformer<ConnectivityResult, ConnectivityResult>.fromHandlers(
1212
handleData: (ConnectivityResult data, EventSink<ConnectivityResult> sink) {
@@ -33,13 +33,13 @@ StreamTransformer<ConnectivityResult, ConnectivityResult> startsWith(
3333
Stream<ConnectivityResult> input,
3434
bool cancelOnError,
3535
) {
36-
StreamController<ConnectivityResult> controller;
37-
StreamSubscription<ConnectivityResult> subscription;
36+
StreamController<ConnectivityResult>? controller;
37+
late StreamSubscription<ConnectivityResult> subscription;
3838

3939
controller = StreamController<ConnectivityResult>(
4040
sync: true,
4141
onListen: () => controller?.add(data),
42-
onPause: ([Future<dynamic> resumeSignal]) => subscription.pause(resumeSignal),
42+
onPause: ([Future<dynamic>? resumeSignal]) => subscription.pause(resumeSignal),
4343
onResume: () => subscription.resume(),
4444
onCancel: () => subscription.cancel(),
4545
);

pubspec.lock

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -49,28 +49,21 @@ packages:
4949
name: connectivity
5050
url: "https://pub.dartlang.org"
5151
source: hosted
52-
version: "2.0.2"
53-
connectivity_for_web:
54-
dependency: transitive
55-
description:
56-
name: connectivity_for_web
57-
url: "https://pub.dartlang.org"
58-
source: hosted
59-
version: "0.3.1+4"
52+
version: "3.0.2"
6053
connectivity_macos:
6154
dependency: transitive
6255
description:
6356
name: connectivity_macos
6457
url: "https://pub.dartlang.org"
6558
source: hosted
66-
version: "0.1.0+7"
59+
version: "0.2.0"
6760
connectivity_platform_interface:
6861
dependency: transitive
6962
description:
7063
name: connectivity_platform_interface
7164
url: "https://pub.dartlang.org"
7265
source: hosted
73-
version: "1.0.6"
66+
version: "2.0.1"
7467
fake_async:
7568
dependency: transitive
7669
description:
@@ -88,18 +81,6 @@ packages:
8881
description: flutter
8982
source: sdk
9083
version: "0.0.0"
91-
flutter_web_plugins:
92-
dependency: transitive
93-
description: flutter
94-
source: sdk
95-
version: "0.0.0"
96-
js:
97-
dependency: transitive
98-
description:
99-
name: js
100-
url: "https://pub.dartlang.org"
101-
source: hosted
102-
version: "0.6.3"
10384
matcher:
10485
dependency: transitive
10586
description:
@@ -127,14 +108,14 @@ packages:
127108
name: pedantic
128109
url: "https://pub.dartlang.org"
129110
source: hosted
130-
version: "1.9.2"
111+
version: "1.11.0"
131112
plugin_platform_interface:
132113
dependency: transitive
133114
description:
134115
name: plugin_platform_interface
135116
url: "https://pub.dartlang.org"
136117
source: hosted
137-
version: "1.0.3"
118+
version: "2.0.0"
138119
sky_engine:
139120
dependency: transitive
140121
description: flutter
@@ -202,14 +183,14 @@ packages:
202183
name: wifi_info_flutter
203184
url: "https://pub.dartlang.org"
204185
source: hosted
205-
version: "1.0.4"
186+
version: "2.0.0"
206187
wifi_info_flutter_platform_interface:
207188
dependency: transitive
208189
description:
209190
name: wifi_info_flutter_platform_interface
210191
url: "https://pub.dartlang.org"
211192
source: hosted
212-
version: "1.0.0"
193+
version: "2.0.1"
213194
sdks:
214-
dart: ">=2.12.0-0.0 <3.0.0"
215-
flutter: ">=1.20.0"
195+
dart: ">=2.12.0 <3.0.0"
196+
flutter: ">=2.0.0"

pubspec.yaml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
name: flutter_offline
22
description: A tidy utility to handle offline/online connectivity like a Boss.
3-
version: 1.0.0
3+
version: 2.0.0
44
homepage: https://github.com/jogboms/flutter_offline
55

66
environment:
7-
sdk: ">=2.1.0 <3.0.0"
7+
sdk: '>=2.12.0 <3.0.0'
8+
flutter: ">=2.0.0"
89

910
dependencies:
1011
flutter:
1112
sdk: flutter
12-
connectivity: ^2.0.0
13-
wifi_info_flutter: ^1.0.0
13+
connectivity: ^3.0.2
14+
wifi_info_flutter: ^2.0.0
1415

1516
dev_dependencies:
1617
flutter_test:
1718
sdk: flutter
18-
pedantic: ^1.9.0
19+
pedantic: ^1.11.0

test/flutter_offline_test.dart

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -46,40 +46,6 @@ void main() {
4646
});
4747

4848
group('Test Assertions', () {
49-
testWidgets('Test no debounceDuration param', (WidgetTester tester) async {
50-
expect(() {
51-
OfflineBuilder.initialize(
52-
connectivityService: TestConnectivityService(ConnectivityResult.none),
53-
wifiInfo: TestWifiInfoService(),
54-
connectivityBuilder: (_, __, Widget child) => child,
55-
debounceDuration: null,
56-
builder: (BuildContext context) => Text('builder_result'),
57-
);
58-
}, throwsAssertionError);
59-
});
60-
61-
testWidgets('Test no connectivityBuilder param', (WidgetTester tester) async {
62-
expect(() {
63-
OfflineBuilder.initialize(
64-
connectivityService: TestConnectivityService(ConnectivityResult.none),
65-
wifiInfo: TestWifiInfoService(),
66-
connectivityBuilder: null,
67-
child: const Text('child_result'),
68-
);
69-
}, throwsAssertionError);
70-
});
71-
72-
testWidgets('Test no connectivityService param', (WidgetTester tester) async {
73-
expect(() {
74-
OfflineBuilder.initialize(
75-
connectivityService: null,
76-
wifiInfo: null,
77-
connectivityBuilder: (_, __, Widget child) => child,
78-
child: const Text('child_result'),
79-
);
80-
}, throwsAssertionError);
81-
});
82-
8349
testWidgets('Test builder & child param', (WidgetTester tester) async {
8450
expect(() {
8551
OfflineBuilder.initialize(
@@ -257,9 +223,9 @@ void main() {
257223
connectivityService: service,
258224
wifiInfo: TestWifiInfoService(),
259225
connectivityBuilder: (_, ConnectivityResult connectivity, __) => Text('$connectivity'),
260-
child: const SizedBox(),
261226
debounceDuration: Duration.zero,
262227
errorBuilder: (context) => Text('Error'),
228+
child: const SizedBox(),
263229
),
264230
));
265231

@@ -274,16 +240,16 @@ void main() {
274240
}
275241

276242
class TestConnectivityService implements Connectivity {
277-
TestConnectivityService([this.initialConnection]) {
278-
_result = initialConnection;
243+
TestConnectivityService([this.initialConnection]) : _result = initialConnection ?? ConnectivityResult.none {
279244
controller = StreamController<ConnectivityResult>.broadcast(
280245
onListen: () => controller.add(_result),
281246
);
282247
}
283248

284-
StreamController<ConnectivityResult> controller;
285-
ConnectivityResult _result = ConnectivityResult.none;
286-
final ConnectivityResult initialConnection;
249+
late final StreamController<ConnectivityResult> controller;
250+
final ConnectivityResult? initialConnection;
251+
252+
ConnectivityResult _result;
287253

288254
set result(ConnectivityResult result) {
289255
_result = result;
@@ -297,7 +263,7 @@ class TestConnectivityService implements Connectivity {
297263

298264
@override
299265
Future<ConnectivityResult> checkConnectivity() {
300-
return Future.delayed(Duration.zero, () => initialConnection);
266+
return Future.delayed(Duration.zero, () => initialConnection!);
301267
}
302268
}
303269

0 commit comments

Comments
 (0)