Skip to content

Commit 1bbcfae

Browse files
committed
+Add fromStream constructor for Pod
1 parent 84b5670 commit 1bbcfae

12 files changed

Lines changed: 136 additions & 96 deletions

README.md

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
<a href="https://www.buymeacoffee.com/dev_cetera" target="_blank"><img align="right" src="https://cdn.buymeacoffee.com/buttons/default-orange.png" height="48"></a>
2-
<a href="https://discord.gg/gEQ8y2nfyX" target="_blank"><img align="right" src="https://raw.githubusercontent.com/dev-cetera/.github/refs/heads/main/assets/icons/discord_icon/discord_icon.svg" height="48"></a>
1+
[![banner](https://github.com/dev-cetera/df_pod/blob/v0.18.11/doc/assets/banner.png?raw=true)](https://github.com/dev-cetera)
32

4-
Dart & Flutter Packages by dev-cetera.com & contributors.
5-
6-
[![sponsor](https://img.shields.io/badge/sponsor-grey?logo=github-sponsors)](https://github.com/sponsors/dev-cetera)
7-
[![patreon](https://img.shields.io/badge/patreon-grey?logo=patreon)](https://www.patreon.com/c/RobertMollentze)
83
[![pub](https://img.shields.io/pub/v/df_pod.svg)](https://pub.dev/packages/df_pod)
9-
[![tag](https://img.shields.io/badge/tag-v0.18.11-purple?logo=github)](https://github.com/dev-cetera/df_pod/tree/v0.18.11)
10-
[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/dev-cetera/df_pod/main/LICENSE)
4+
[![tag](https://img.shields.io/badge/Tag-v0.18.11-purple?logo=github)](https://github.com/dev-cetera/df_pod/tree/v0.18.11)
5+
[![buymeacoffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-FFDD00?logo=buy-me-a-coffee&logoColor=black)](https://www.buymeacoffee.com/dev_cetera)
6+
[![sponsor](https://img.shields.io/badge/Sponsor-grey?logo=github-sponsors&logoColor=pink)](https://github.com/sponsors/dev-cetera)
7+
[![patreon](https://img.shields.io/badge/Patreon-grey?logo=patreon)](https://www.patreon.com/robelator)
8+
[![discord](https://img.shields.io/badge/Discord-5865F2?logo=discord&logoColor=white)](https://discord.gg/gEQ8y2nfyX)
9+
[![instagram](https://img.shields.io/badge/Instagram-E4405F?logo=instagram&logoColor=white)](https://www.instagram.com/dev_cetera/)
10+
[![license](https://img.shields.io/badge/License-MIT-blue.svg)](https://raw.githubusercontent.com/dev-cetera/df_pod/main/LICENSE)
1111

1212
---
1313

14-
[![banner](https://github.com/dev-cetera/df_safer_dart/blob/v0.18.11/doc/assets/banner.png?raw=true)](https://github.com/dev-cetera)
15-
1614
<!-- BEGIN _README_CONTENT -->
1715

1816
## ℹ️ Features
@@ -212,7 +210,7 @@ PodListBuilder(
212210
if (!loggedIn) {
213211
return const Text('Please log in.');
214212
}
215-
return Text('You have $count items in your cart. Total: \$$total');
213+
return Text('You have $count items in your cart. Total: \$total');
216214
},
217215
);
218216
```
@@ -314,7 +312,7 @@ analyzer:
314312
315313
---
316314
317-
☝️ Please refer to the [API reference](https://pub.dev/documentation/df_pod/) for more information.
315+
🔍 For more information, refer to the [API reference](https://pub.dev/documentation/df_pod/).
318316
319317
---
320318
@@ -324,7 +322,6 @@ This is an open-source project, and we warmly welcome contributions from everyon
324322
325323
### ☝️ Ways you can contribute
326324
327-
- **Buy me a coffee:** If you'd like to support the project financially, consider [buying me a coffee](https://www.buymeacoffee.com/dev_cetera). Your support helps cover the costs of development and keeps the project growing.
328325
- **Find us on Discord:** Feel free to ask questions and engage with the community here: https://discord.gg/gEQ8y2nfyX.
329326
- **Share your ideas:** Every perspective matters, and your ideas can spark innovation.
330327
- **Help others:** Engage with other users by offering advice, solutions, or troubleshooting assistance.
@@ -341,6 +338,6 @@ If you're enjoying this package and find it valuable, consider showing your appr
341338
342339
<a href="https://www.buymeacoffee.com/dev_cetera" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" height="40"></a>
343340
344-
## 🧑‍⚖️ License
341+
## LICENSE
345342
346343
This project is released under the [MIT License](https://raw.githubusercontent.com/dev-cetera/df_pod/main/LICENSE). See [LICENSE](https://raw.githubusercontent.com/dev-cetera/df_pod/main/LICENSE) for more information.

analysis_options.yaml

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
1-
##.title
2-
## ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
3-
##
4-
## Copyright © dev-cetera.com & contributors.
5-
##
6-
## The use of this source code is governed by an MIT-style license described in
7-
## the LICENSE file located in this project's root directory.
8-
##
9-
## See: https://opensource.org/license/mit
10-
##
11-
## ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
12-
##.title~
1+
# For dev-cetera.com
2+
# Version: Flutter-1
133

144
include: package:flutter_lints/flutter.yaml
155

@@ -31,6 +21,7 @@ linter:
3121
prefer_relative_imports: true
3222
prefer_single_quotes: true
3323
require_trailing_commas: true
24+
unawaited_futures: true
3425
unnecessary_this: true
3526

3627
analyzer:
@@ -42,22 +33,27 @@ analyzer:
4233
strict-raw-types: true
4334
exclude:
4435
- build/**
36+
# - '**.g.dart'
4537

4638
errors:
47-
unused_label: ignore
4839
always_declare_return_types: error
4940
avoid_renaming_method_parameters: error
5041
avoid_type_to_string: error
42+
close_sinks: error
43+
collection_methods_unrelated_type: error
5144
depend_on_referenced_packages: error
5245
flutter_style_todos: error
5346
invalid_override_of_non_virtual_member: error
5447
invalid_use_of_protected_member: error
48+
missing_return: error
5549
no_leading_underscores_for_local_identifiers: error
5650
prefer_final_in_for_each: error
5751
prefer_relative_imports: error
52+
record_literal_one_positional_no_trailing_comma: error
5853
unnecessary_new: error
5954
unrelated_type_equality_checks: error
55+
unused_label: ignore
6056
use_key_in_widget_constructors: error
6157

6258
formatter:
63-
trailing_commas: preserve
59+
trailing_commas: preserve

example/analysis_options.yaml

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,5 @@
1-
##.title
2-
## ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
3-
##
4-
## Copyright © dev-cetera.com & contributors.
5-
##
6-
## The use of this source code is governed by an MIT-style license described in
7-
## the LICENSE file located in this project's root directory.
8-
##
9-
## See: https://opensource.org/license/mit
10-
##
11-
## ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
12-
##.title~
1+
# For dev-cetera.com
2+
# Version: Flutter-1
133

144
include: package:flutter_lints/flutter.yaml
155

@@ -31,6 +21,7 @@ linter:
3121
prefer_relative_imports: true
3222
prefer_single_quotes: true
3323
require_trailing_commas: true
24+
unawaited_futures: true
3425
unnecessary_this: true
3526

3627
analyzer:
@@ -42,22 +33,27 @@ analyzer:
4233
strict-raw-types: true
4334
exclude:
4435
- build/**
36+
# - '**.g.dart'
4537

4638
errors:
47-
unused_label: ignore
4839
always_declare_return_types: error
4940
avoid_renaming_method_parameters: error
5041
avoid_type_to_string: error
42+
close_sinks: error
43+
collection_methods_unrelated_type: error
5144
depend_on_referenced_packages: error
5245
flutter_style_todos: error
5346
invalid_override_of_non_virtual_member: error
5447
invalid_use_of_protected_member: error
48+
missing_return: error
5549
no_leading_underscores_for_local_identifiers: error
5650
prefer_final_in_for_each: error
5751
prefer_relative_imports: error
52+
record_literal_one_positional_no_trailing_comma: error
5853
unnecessary_new: error
5954
unrelated_type_equality_checks: error
55+
unused_label: ignore
6056
use_key_in_widget_constructors: error
6157

6258
formatter:
63-
trailing_commas: preserve
59+
trailing_commas: preserve

example/pubspec.yaml

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
name: df_pod_example
22
homepage: https://dev-cetera.com/
3-
repository: https://github.com/robmllze/df_pod
4-
funding:
5-
- https://www.buymeacoffee.com/dev_cetera
6-
- https://www.patreon.com/c/RobertMollentze
7-
- https://github.com/sponsors/robmllze
8-
publish_to: 'none'
9-
version: 1.0.0+1
3+
publish_to: none
4+
version: 0.1.0
105
environment:
116
sdk: ">=3.5.0 <4.0.0"
127
dependencies:

lib/src/builders/pod_builder.dart

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ class AsyncPodBuilder<T extends Object> extends StatelessWidget {
186186
PodBuilderSnapshot(
187187
pod: Option.from(pod),
188188
value: Option.from(
189-
PodBuilderCacheManager.i.cacheManager.get(key?.toString()) as Result<T>?,
189+
PodBuilderCacheManager.i.cacheManager.get(key?.toString())
190+
as Result<T>?,
190191
),
191192
child: child,
192193
),
@@ -235,7 +236,8 @@ final class PodResultBuilder<T extends Object> extends StatefulWidget {
235236

236237
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
237238

238-
final class PodResultBuilderState<T extends Object> extends State<PodResultBuilder<T>> {
239+
final class PodResultBuilderState<T extends Object>
240+
extends State<PodResultBuilder<T>> {
239241
//
240242
//
241243
//
@@ -266,10 +268,14 @@ final class PodResultBuilderState<T extends Object> extends State<PodResultBuild
266268
super.didUpdateWidget(oldWidget);
267269
UNSAFE:
268270
{
269-
oldWidget.pod.ifOk((self, ok) => ok.unwrap().removeListener(_valueChanged)).end();
271+
oldWidget.pod
272+
.ifOk((self, ok) => ok.unwrap().removeListener(_valueChanged))
273+
.end();
270274
_setValue();
271275
_cacheValue();
272-
widget.pod.ifOk((self, ok) => ok.unwrap().addListener(_valueChanged)).end();
276+
widget.pod
277+
.ifOk((self, ok) => ok.unwrap().addListener(_valueChanged))
278+
.end();
273279
}
274280
}
275281

@@ -280,7 +286,8 @@ final class PodResultBuilderState<T extends Object> extends State<PodResultBuild
280286
void _setValue() {
281287
final key = widget.key;
282288
if (key != null) {
283-
final cachedValue = PodBuilderCacheManager.i.cacheManager.get(key.toString()) as Result<T>?;
289+
final cachedValue = PodBuilderCacheManager.i.cacheManager
290+
.get(key.toString()) as Result<T>?;
284291
if (cachedValue != null) {
285292
_value = cachedValue;
286293
return;
@@ -377,8 +384,12 @@ final class PodBuilderSnapshot<T extends Object> extends OnOptionSnapshot<T> {
377384
});
378385
}
379386

380-
typedef TOnOptionBuilder<T extends Object, TSnapshot extends OnOptionSnapshot<T>> = Widget Function(
381-
BuildContext context, TSnapshot snapshot);
387+
typedef TOnOptionBuilder<T extends Object,
388+
TSnapshot extends OnOptionSnapshot<T>>
389+
= Widget Function(
390+
BuildContext context,
391+
TSnapshot snapshot,
392+
);
382393

383394
final class OnOptionSnapshot<T extends Object> extends BuilderSnapshot {
384395
final Option<Result<T>> value;

lib/src/pods/core/_generic_pod_mixin.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ mixin GenericPodMixin<T extends Object> on PodNotifier<T>, ValueListenable<T> {
103103
/// Disposes all children before disposing `this`.
104104
@override
105105
void dispose() {
106-
this.disposeChildren();
106+
disposeChildren();
107107
super.dispose();
108108
}
109109

lib/src/pods/core/_reducers/pod_reducer_2.dart

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ final class PodReducer2 {
2020
PodReducer2._();
2121

2222
/// Reduces 2 Pods into a [ChildPod].
23-
static ChildPod<Object, C> reduce<C extends Object, P1 extends Object, P2 extends Object>(
24-
TResponderFn2<P1, P2> responder, TNullableReducerFn2<C, P1, P2> reducer) {
23+
static ChildPod<Object, C>
24+
reduce<C extends Object, P1 extends Object, P2 extends Object>(
25+
TResponderFn2<P1, P2> responder,
26+
TNullableReducerFn2<C, P1, P2> reducer,
27+
) {
2528
return ChildPod<Object, C>(
2629
responder: () => _toList(responder),
2730
reducer: (_) => _reduce(responder, reducer),
@@ -48,11 +51,18 @@ final class PodReducer2 {
4851

4952
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
5053

51-
typedef TResponderFn2<P1 extends Object, P2 extends Object> = (GenericPod<P1> p1, GenericPod<P2> p2)
52-
Function();
54+
typedef TResponderFn2<P1 extends Object, P2 extends Object>
55+
= (GenericPod<P1> p1, GenericPod<P2> p2) Function();
5356

54-
typedef TNullableReducerFn2<C extends Object, P1 extends Object, P2 extends Object> = C Function(
55-
GenericPod<P1> p1, GenericPod<P2> p2);
57+
typedef TNullableReducerFn2<C extends Object, P1 extends Object,
58+
P2 extends Object>
59+
= C Function(
60+
GenericPod<P1> p1,
61+
GenericPod<P2> p2,
62+
);
5663

57-
typedef TReducerFn2<C extends Object, P1 extends Object, P2 extends Object> = C Function(
58-
GenericPod<P1> p1, GenericPod<P2> p2);
64+
typedef TReducerFn2<C extends Object, P1 extends Object, P2 extends Object> = C
65+
Function(
66+
GenericPod<P1> p1,
67+
GenericPod<P2> p2,
68+
);

lib/src/pods/core/_reducers/pod_reducer_3.dart

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,32 @@ final class PodReducer3 {
2020
PodReducer3._();
2121

2222
/// Reduces 3 Pods into a [ChildPod].
23-
static ChildPod<Object, C>
24-
reduce<C extends Object, P1 extends Object, P2 extends Object, P3 extends Object>(
25-
TResponderFn3<P1, P2, P3> responder, TReducerFn3<C, P1, P2, P3> reducer) {
23+
static ChildPod<Object, C> reduce<C extends Object, P1 extends Object,
24+
P2 extends Object, P3 extends Object>(
25+
TResponderFn3<P1, P2, P3> responder,
26+
TReducerFn3<C, P1, P2, P3> reducer,
27+
) {
2628
return ChildPod<Object, C>(
2729
responder: () => _toList(responder),
2830
reducer: (_) => _reduce(responder, reducer),
2931
);
3032
}
3133

3234
/// Converts the response from the responder function into a list of Pods.
33-
static List<GenericPod<Object>> _toList<P1 extends Object, P2 extends Object, P3 extends Object>(
34-
TResponderFn3<P1, P2, P3> responder) {
35+
static List<GenericPod<Object>>
36+
_toList<P1 extends Object, P2 extends Object, P3 extends Object>(
37+
TResponderFn3<P1, P2, P3> responder,
38+
) {
3539
final response = responder.call();
3640
return [response.$1, response.$2, response.$3];
3741
}
3842

3943
/// Reduces the values from 3 Pods using the provided reducer function.
40-
static C _reduce<C extends Object, P1 extends Object, P2 extends Object, P3 extends Object>(
41-
TResponderFn3<P1, P2, P3> responder, TReducerFn3<C, P1, P2, P3> reducer) {
44+
static C _reduce<C extends Object, P1 extends Object, P2 extends Object,
45+
P3 extends Object>(
46+
TResponderFn3<P1, P2, P3> responder,
47+
TReducerFn3<C, P1, P2, P3> reducer,
48+
) {
4249
final response = responder();
4350
return reducer(response.$1, response.$2, response.$3);
4451
}
@@ -49,5 +56,6 @@ final class PodReducer3 {
4956
typedef TResponderFn3<P1 extends Object, P2 extends Object, P3 extends Object>
5057
= (GenericPod<P1> p1, GenericPod<P2> p2, GenericPod<P3> p3) Function();
5158

52-
typedef TReducerFn3<C extends Object, P1 extends Object, P2 extends Object, P3 extends Object> = C
53-
Function(GenericPod<P1> p1, GenericPod<P2> p2, GenericPod<P3> p3);
59+
typedef TReducerFn3<C extends Object, P1 extends Object, P2 extends Object,
60+
P3 extends Object>
61+
= C Function(GenericPod<P1> p1, GenericPod<P2> p2, GenericPod<P3> p3);

0 commit comments

Comments
 (0)