Skip to content

Commit 081f9de

Browse files
committed
DataState add message attribute
1 parent 84c7ae7 commit 081f9de

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

lib/src/utils/data_state.dart

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,30 @@ class DataState<T> with EquatableMixin {
55
final bool isLoading;
66
final DataException? exception;
77
final StackTrace? stackTrace;
8+
final String? message;
89

910
const DataState(
1011
this.model, {
1112
this.isLoading = false,
1213
this.exception,
1314
this.stackTrace,
15+
this.message,
1416
});
1517

1618
bool get hasException => exception != null;
1719

1820
bool get hasModel => model != null;
1921

22+
bool get hasMessage => message != null;
23+
2024
DataState<T> merge(DataState<T> value) {
2125
// only optional values do not get overwritten
2226
return DataState(
2327
value.model,
2428
isLoading: value.isLoading,
2529
exception: value.exception ?? exception,
2630
stackTrace: value.stackTrace ?? stackTrace,
31+
message: value.message ?? message,
2732
);
2833
}
2934

@@ -53,12 +58,12 @@ class DataException with EquatableMixin implements Exception {
5358
class DataStateNotifier<T> extends StateNotifier<DataState<T>> {
5459
DataStateNotifier({
5560
required DataState<T> data,
56-
Future<void> Function()? reload,
61+
Future<void> Function(DataStateNotifier<T> notifier)? reload,
5762
}) : _reloadFn = reload,
5863
super(data);
5964

6065
// ignore: prefer_final_fields
61-
Future<void> Function()? _reloadFn;
66+
Future<void> Function(DataStateNotifier<T>)? _reloadFn;
6267
void Function()? onDispose;
6368

6469
DataState<T> get data => super.state;
@@ -68,6 +73,7 @@ class DataStateNotifier<T> extends StateNotifier<DataState<T>> {
6873
bool? isLoading,
6974
Object? exception = stamp,
7075
Object? stackTrace = stamp,
76+
Object? message = stamp,
7177
}) {
7278
super.state = DataState<T>(
7379
model == stamp ? state.model : model as T,
@@ -76,11 +82,12 @@ class DataStateNotifier<T> extends StateNotifier<DataState<T>> {
7682
exception == stamp ? state.exception : exception as DataException?,
7783
stackTrace:
7884
stackTrace == stamp ? state.stackTrace : stackTrace as StackTrace?,
85+
message: message == stamp ? state.message : message as String?,
7986
);
8087
}
8188

8289
Future<void> reload() async {
83-
return _reloadFn?.call();
90+
return _reloadFn?.call(this);
8491
}
8592

8693
@override

test/utils/data_state_test.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ void main() {
2727
break;
2828
case 1:
2929
expect(state.model, 'data');
30+
expect(state.message, 'random message');
3031
break;
3132
case 2:
3233
expect(state.model, 'data2');
@@ -35,6 +36,7 @@ void main() {
3536
case 3:
3637
expect(state.model, 'data3');
3738
expect(state.isLoading, isTrue);
39+
expect(state.message, isNull);
3840
break;
3941
case 4:
4042
expect(state.model, isNull);
@@ -50,11 +52,11 @@ void main() {
5052
}, fireImmediately: false);
5153

5254
i++;
53-
notifier.updateWith(model: 'data');
55+
notifier.updateWith(model: 'data', message: 'random message');
5456
i++;
5557
notifier.updateWith(model: 'data2', isLoading: true);
5658
i++;
57-
notifier.updateWith(model: 'data3');
59+
notifier.updateWith(model: 'data3', message: null);
5860
i++;
5961
notifier.updateWith(model: null);
6062
await delay();

0 commit comments

Comments
 (0)