Skip to content

Commit 7c51001

Browse files
committed
+Refector and cleaning
1 parent 73dc689 commit 7c51001

22 files changed

Lines changed: 111 additions & 135 deletions

lib/_common.dart

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//.title
2+
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
3+
//
4+
// Dart/Flutter (DF) Packages by dev-cetera.com & contributors. The use of this
5+
// source code is governed by an MIT-style license described in the LICENSE
6+
// file located in this project's root directory.
7+
//
8+
// See: https://opensource.org/license/mit
9+
//
10+
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
11+
//.title~
12+
13+
export 'dart:async' show Timer, FutureOr;
14+
export 'dart:convert';
15+
export 'dart:ui' show VoidCallback;
16+
17+
export 'package:df_debouncer/df_debouncer.dart';
18+
export 'package:df_log/df_log.dart';
19+
export 'package:df_safer_dart/df_safer_dart.dart';
20+
21+
export 'package:flutter/foundation.dart';
22+
export 'package:flutter/widgets.dart';
23+
24+
export 'package:meta/meta.dart';
25+
26+
export '/src/_src.g.dart';

lib/src/_mixins/protected_pod_mixin.dart

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@
1010
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
1111
//.title~
1212

13-
import 'dart:ui' show VoidCallback;
14-
15-
import 'package:meta/meta.dart';
16-
17-
import '/src/_src.g.dart';
13+
import '/_common.dart';
1814

1915
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
2016

lib/src/builders/builder_utils.dart

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@
1010
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
1111
//.title~
1212

13-
import 'package:df_debouncer/df_debouncer.dart' show CacheManager;
14-
import 'package:df_safer_dart/df_safer_dart.dart';
15-
import 'package:flutter/widgets.dart' show Widget;
16-
17-
import '../pods/core/core.dart' show GenericPod;
13+
import '/_common.dart';
1814

1915
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
2016

@@ -29,5 +25,4 @@ final class PodBuilderCacheManager {
2925
static final i = PodBuilderCacheManager._(CacheManager<Object>());
3026
}
3127

32-
typedef TGlobalPod<T extends Object> =
33-
Resolvable<GenericPod<Option<Result<T>>>>;
28+
typedef TGlobalPod<T extends Object> = Resolvable<GenericPod<Option<Result<T>>>>;

lib/src/builders/pod_builder.dart

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,7 @@
1010
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
1111
//.title~
1212

13-
import 'dart:async' show Timer, FutureOr;
14-
import 'package:df_log/df_log.dart' show Log;
15-
import 'package:df_safer_dart/df_safer_dart.dart';
16-
import 'package:flutter/foundation.dart' show ValueListenable;
17-
import 'package:flutter/widgets.dart';
18-
19-
import '/src/_src.g.dart';
13+
import '/_common.dart';
2014

2115
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
2216

@@ -66,6 +60,7 @@ class ResolvablePodBuilder<T extends Object> extends StatelessWidget {
6660

6761
@override
6862
Widget build(BuildContext context) {
63+
UNSAFE:
6964
if (pod.isSync()) {
7065
return SyncPodBuilder(
7166
key: key,
@@ -190,8 +185,7 @@ class AsyncPodBuilder<T extends Object> extends StatelessWidget {
190185
PodBuilderSnapshot(
191186
pod: Option.from(pod),
192187
value: Option.from(
193-
PodBuilderCacheManager.i.cacheManager.get(key?.toString())
194-
as Result<T>?,
188+
PodBuilderCacheManager.i.cacheManager.get(key?.toString()) as Result<T>?,
195189
),
196190
child: child,
197191
),
@@ -240,8 +234,7 @@ final class PodResultBuilder<T extends Object> extends StatefulWidget {
240234

241235
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
242236

243-
final class PodResultBuilderState<T extends Object>
244-
extends State<PodResultBuilder<T>> {
237+
final class PodResultBuilderState<T extends Object> extends State<PodResultBuilder<T>> {
245238
//
246239
//
247240
//
@@ -259,7 +252,8 @@ final class PodResultBuilderState<T extends Object>
259252
_staticChild = widget.child;
260253
_setValue();
261254
_cacheValue();
262-
widget.pod.ifOk((self, ok) => ok.unwrap().addListener(_valueChanged));
255+
UNSAFE:
256+
widget.pod.ifOk((self, ok) => ok.unwrap().addListener(_valueChanged)).end();
263257
}
264258

265259
//
@@ -269,10 +263,13 @@ final class PodResultBuilderState<T extends Object>
269263
@override
270264
void didUpdateWidget(PodResultBuilder<T> oldWidget) {
271265
super.didUpdateWidget(oldWidget);
272-
oldWidget.pod.ifOk((self, ok) => ok.unwrap().removeListener(_valueChanged));
273-
_setValue();
274-
_cacheValue();
275-
widget.pod.ifOk((self, ok) => ok.unwrap().addListener(_valueChanged));
266+
UNSAFE:
267+
{
268+
oldWidget.pod.ifOk((self, ok) => ok.unwrap().removeListener(_valueChanged)).end();
269+
_setValue();
270+
_cacheValue();
271+
widget.pod.ifOk((self, ok) => ok.unwrap().addListener(_valueChanged)).end();
272+
}
276273
}
277274

278275
//
@@ -282,9 +279,7 @@ final class PodResultBuilderState<T extends Object>
282279
void _setValue() {
283280
final key = widget.key;
284281
if (key != null) {
285-
final cachedValue =
286-
PodBuilderCacheManager.i.cacheManager.get(key.toString())
287-
as Result<T>?;
282+
final cachedValue = PodBuilderCacheManager.i.cacheManager.get(key.toString()) as Result<T>?;
288283
if (cachedValue != null) {
289284
_value = cachedValue;
290285
return;
@@ -358,6 +353,7 @@ final class PodResultBuilderState<T extends Object>
358353
@override
359354
void dispose() {
360355
_debounceTimer?.cancel();
356+
UNSAFE:
361357
if (widget.pod.isOk()) {
362358
widget.pod.unwrap().removeListener(_valueChanged);
363359
widget.onDispose?.call(widget.pod.unwrap());
@@ -380,10 +376,8 @@ final class PodBuilderSnapshot<T extends Object> extends OnOptionSnapshot<T> {
380376
});
381377
}
382378

383-
typedef TOnOptionBuilder<
384-
T extends Object,
385-
TSnapshot extends OnOptionSnapshot<T>
386-
> = Widget Function(BuildContext context, TSnapshot snapshot);
379+
typedef TOnOptionBuilder<T extends Object, TSnapshot extends OnOptionSnapshot<T>> = Widget Function(
380+
BuildContext context, TSnapshot snapshot);
387381

388382
final class OnOptionSnapshot<T extends Object> extends BuilderSnapshot {
389383
final Option<Result<T>> value;

lib/src/builders/pod_list_builder.dart

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,7 @@
1010
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
1111
//.title~
1212

13-
import 'dart:async' show Timer, FutureOr;
14-
import 'package:df_log/df_log.dart' show Log;
15-
import 'package:df_safer_dart/df_safer_dart.dart';
16-
import 'package:flutter/foundation.dart' show ValueListenable;
17-
import 'package:flutter/widgets.dart';
18-
19-
import '/src/_src.g.dart';
13+
import '/_common.dart';
2014

2115
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
2216

@@ -66,6 +60,7 @@ class ResolvablePodListBuilder<T extends Object> extends StatelessWidget {
6660
@override
6761
Widget build(BuildContext context) {
6862
final isSync = podList.every((e) => e.isSync());
63+
UNSAFE:
6964
if (isSync) {
7065
return SyncPodListBuilder(
7166
key: key,
@@ -173,9 +168,7 @@ class ForcedAsyncPodListBuilder<T extends Object> extends StatelessWidget {
173168
return FutureBuilder(
174169
future: () async {
175170
return await Future.wait(
176-
podList
177-
.map((e) => e.toAsync().value)
178-
.map(
171+
podList.map((e) => e.toAsync().value).map(
179172
(e) => () async {
180173
return e;
181174
}(),
@@ -246,8 +239,7 @@ final class PodResultListBuilder<T extends Object> extends StatefulWidget {
246239

247240
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
248241

249-
final class PodResultListBuilderState<T extends Object>
250-
extends State<PodResultListBuilder<T>> {
242+
final class PodResultListBuilderState<T extends Object> extends State<PodResultListBuilder<T>> {
251243
//
252244
//
253245
//
@@ -289,8 +281,7 @@ final class PodResultListBuilderState<T extends Object>
289281
final key = widget.key;
290282
if (key != null) {
291283
final cachedValue =
292-
PodBuilderCacheManager.i.cacheManager.get(key.toString())
293-
as Iterable<Result<T>>?;
284+
PodBuilderCacheManager.i.cacheManager.get(key.toString()) as Iterable<Result<T>>?;
294285
if (cachedValue != null) {
295286
_valueList = cachedValue;
296287
return;
@@ -322,6 +313,7 @@ final class PodResultListBuilderState<T extends Object>
322313
void _addListenerToPods(Iterable<Result<ValueListenable<T>>> pods) {
323314
for (final pod in pods) {
324315
if (pod.isErr()) continue;
316+
UNSAFE:
325317
pod.unwrap().addListener(_valueChanged);
326318
}
327319
}
@@ -333,6 +325,7 @@ final class PodResultListBuilderState<T extends Object>
333325
void _removeListenerFromPods(Iterable<Result<ValueListenable<T>>> pods) {
334326
for (final pod in pods) {
335327
if (pod.isErr()) continue;
328+
UNSAFE:
336329
pod.unwrap().removeListener(_valueChanged);
337330
}
338331
}
@@ -391,8 +384,11 @@ final class PodResultListBuilderState<T extends Object>
391384
Log.err('Tried to dispose Err<ValueListenable<T>>!', {#df_pod});
392385
continue;
393386
}
394-
pod.unwrap().removeListener(_valueChanged);
395-
temp.add(pod.unwrap());
387+
UNSAFE:
388+
{
389+
pod.unwrap().removeListener(_valueChanged);
390+
temp.add(pod.unwrap());
391+
}
396392
}
397393
widget.onDispose?.call(temp);
398394
super.dispose();
@@ -401,8 +397,7 @@ final class PodResultListBuilderState<T extends Object>
401397

402398
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
403399

404-
final class PodListBuilderSnapshot<T extends Object>
405-
extends OnOptionListSnapshot<T> {
400+
final class PodListBuilderSnapshot<T extends Object> extends OnOptionListSnapshot<T> {
406401
final Option<Iterable<Result<ValueListenable<T>>>> podList;
407402

408403
const PodListBuilderSnapshot({
@@ -412,10 +407,8 @@ final class PodListBuilderSnapshot<T extends Object>
412407
});
413408
}
414409

415-
typedef TOnOptionListBuilder<
416-
T extends Object,
417-
TSnapshot extends OnOptionListSnapshot<T>
418-
> = Widget Function(BuildContext context, TSnapshot snapshot);
410+
typedef TOnOptionListBuilder<T extends Object, TSnapshot extends OnOptionListSnapshot<T>> = Widget
411+
Function(BuildContext context, TSnapshot snapshot);
419412

420413
class OnOptionListSnapshot<T extends Object> extends BuilderSnapshot {
421414
final Option<Iterable<Option<Result<T>>>> value;

lib/src/builders/polling_pod_builder.dart

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,14 @@
1010
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
1111
//.title~
1212

13-
import 'dart:async' show Timer, FutureOr;
14-
import 'package:df_safer_dart/df_safer_dart.dart';
15-
import 'package:flutter/foundation.dart' show ValueListenable;
16-
import 'package:flutter/widgets.dart';
17-
18-
import '/src/_src.g.dart';
13+
import '/_common.dart';
1914

2015
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
2116

22-
class PollingPodBuilder<T extends Object>
23-
extends ResolvablePollingPodBuilder<T> {
17+
class PollingPodBuilder<T extends Object> extends ResolvablePollingPodBuilder<T> {
2418
PollingPodBuilder({
2519
super.key,
20+
// ignore: no_future_monad_type_or_error
2621
required Option<FutureOr<ValueListenable<T>>> Function() podPoller,
2722
required super.builder,
2823
super.onDispose,
@@ -68,8 +63,7 @@ class ResolvablePollingPodBuilder<T extends Object> extends StatefulWidget {
6863
//
6964

7065
@override
71-
State<ResolvablePollingPodBuilder<T>> createState() =>
72-
_ResolvablePollingPodBuilderState<T>();
66+
State<ResolvablePollingPodBuilder<T>> createState() => _ResolvablePollingPodBuilderState<T>();
7367
}
7468

7569
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
@@ -93,8 +87,7 @@ final class _ResolvablePollingPodBuilderState<T extends Object>
9387
@override
9488
void didUpdateWidget(ResolvablePollingPodBuilder<T> oldWidget) {
9589
super.didUpdateWidget(oldWidget);
96-
if (oldWidget.podPoller != widget.podPoller ||
97-
oldWidget.interval != widget.interval) {
90+
if (oldWidget.podPoller != widget.podPoller || oldWidget.interval != widget.interval) {
9891
_maybeStartPolling();
9992
}
10093
}
@@ -128,6 +121,7 @@ final class _ResolvablePollingPodBuilderState<T extends Object>
128121
@override
129122
Widget build(BuildContext context) {
130123
if (_currentPod.isSome()) {
124+
UNSAFE:
131125
return ResolvablePodBuilder<T>(
132126
key: widget.key,
133127
pod: _currentPod.unwrap(),
@@ -143,8 +137,7 @@ final class _ResolvablePollingPodBuilderState<T extends Object>
143137
PodBuilderSnapshot<T>(
144138
pod: const None(),
145139
value: Option.from(
146-
PodBuilderCacheManager.i.cacheManager.get(widget.key?.toString())
147-
as Result<T>?,
140+
PodBuilderCacheManager.i.cacheManager.get(widget.key?.toString()) as Result<T>?,
148141
),
149142
child: _staticChild,
150143
),

lib/src/pods/core/_generic_pod_mixin.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ mixin GenericPodMixin<T extends Object> on PodNotifier<T>, ValueListenable<T> {
3030
final finisher = SafeCompleter<T>();
3131
final check = () {
3232
if (test(value)) {
33-
finisher.complete(value);
33+
finisher.complete(value).end();
3434
}
3535
};
3636
check();

lib/src/pods/core/_reducer_pod.dart

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ part of 'core.dart';
2525
///
2626
/// Note that when this pod disposes via [dispose], it will not dispose the Pods
2727
/// provided by [responder]. Explicit disposal is needed.
28-
base class ReducerPod<T extends Object> extends PodNotifier<T>
29-
with GenericPod<T> {
28+
base class ReducerPod<T extends Object> extends PodNotifier<T> with GenericPod<T> {
3029
//
3130
//
3231
//
@@ -46,7 +45,10 @@ base class ReducerPod<T extends Object> extends PodNotifier<T>
4645
factory ReducerPod.single(Option<ValueListenable<T>> Function() responder) {
4746
return ReducerPod(
4847
responder: () => [responder()],
49-
reducer: (values) => values.first.transf<T>().unwrap(),
48+
reducer: (values) {
49+
UNSAFE:
50+
return values.first.transf<T>().unwrap();
51+
},
5052
);
5153
}
5254

@@ -69,6 +71,7 @@ base class ReducerPod<T extends Object> extends PodNotifier<T>
6971
late VoidCallback? _refresh = () {
7072
final option = _getValue();
7173
if (option.isSome()) {
74+
UNSAFE:
7275
_set(option.unwrap());
7376
}
7477
};
@@ -91,6 +94,7 @@ base class ReducerPod<T extends Object> extends PodNotifier<T>
9194
for (var n = 0; n < values.length; n++) {
9295
final option = values[n];
9396
if (option.isNone()) continue;
97+
UNSAFE:
9498
final value = option.unwrap();
9599
_listenables.add(value);
96100
value.addListener(_refresh!);

lib/src/pods/disposable_pod.dart

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@
1010
// ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
1111
//.title~
1212

13-
import 'package:df_log/df_log.dart' show Log;
14-
15-
import 'package:flutter/foundation.dart';
16-
17-
import '/src/_src.g.dart';
13+
import '/_common.dart';
1814

1915
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
2016

0 commit comments

Comments
 (0)