Skip to content

Commit 9301029

Browse files
committed
Refactor code samples to use cascade ..pipeToCommand pattern
1 parent 5d2fa01 commit 9301029

2 files changed

Lines changed: 38 additions & 69 deletions

File tree

code_samples/lib/command_it/command_chaining_basic.dart

Lines changed: 23 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,15 @@ final api = ApiClient();
66

77
// #region basic
88
class DataManager {
9-
// When saveCommand completes, automatically refresh
10-
late final saveCommand = Command.createAsyncNoResult<Data>(
11-
(data) => api.save(data),
12-
);
13-
149
late final refreshCommand = Command.createAsyncNoParam<List<Data>>(
1510
() => api.fetchData(),
1611
initialValue: [],
1712
);
1813

19-
DataManager() {
20-
// Pipe save results to trigger refresh
21-
saveCommand.pipeToCommand(refreshCommand);
22-
}
14+
// When saveCommand completes, automatically refresh
15+
late final saveCommand = Command.createAsyncNoResult<Data>(
16+
(data) => api.save(data),
17+
)..pipeToCommand(refreshCommand);
2318

2419
void dispose() {
2520
saveCommand.dispose();
@@ -30,37 +25,25 @@ class DataManager {
3025

3126
// #region from_isrunning
3227
class SpinnerManager {
33-
late final longRunningCommand = Command.createAsyncNoParam<Data>(
34-
() async {
35-
await Future.delayed(Duration(seconds: 5));
36-
return Data();
37-
},
38-
initialValue: Data.empty(),
39-
);
40-
4128
// Command that controls a global spinner
4229
late final showSpinnerCommand = Command.createSync<bool, bool>(
4330
(show) => show,
4431
initialValue: false,
4532
);
4633

47-
SpinnerManager() {
48-
// When long command starts/stops, update spinner
49-
longRunningCommand.isRunning.pipeToCommand(showSpinnerCommand);
50-
}
34+
// When long command starts/stops, update spinner
35+
late final longRunningCommand = Command.createAsyncNoParam<Data>(
36+
() async {
37+
await Future.delayed(Duration(seconds: 5));
38+
return Data();
39+
},
40+
initialValue: Data.empty(),
41+
)..isRunning.pipeToCommand(showSpinnerCommand);
5142
}
5243
// #endregion from_isrunning
5344

5445
// #region from_results
5546
class LoggingManager {
56-
late final saveCommand = Command.createAsync<Data, Data>(
57-
(data) async {
58-
await api.save(data);
59-
return data;
60-
},
61-
initialValue: Data.empty(),
62-
);
63-
6447
late final logCommand = Command.createSync<CommandResult<Data, Data>, void>(
6548
(result) {
6649
if (result.hasError) {
@@ -72,26 +55,27 @@ class LoggingManager {
7255
initialValue: null,
7356
);
7457

75-
LoggingManager() {
76-
// Pipe all results (success/error) to logging
77-
saveCommand.results.pipeToCommand(logCommand);
78-
}
58+
// Pipe all results (success/error) to logging
59+
late final saveCommand = Command.createAsync<Data, Data>(
60+
(data) async {
61+
await api.save(data);
62+
return data;
63+
},
64+
initialValue: Data.empty(),
65+
)..results.pipeToCommand(logCommand);
7966
}
8067
// #endregion from_results
8168

8269
// #region from_valuenotifier
8370
class FormManager {
84-
final selectedUserId = ValueNotifier<String>('');
85-
8671
late final loadUserCommand = Command.createAsync<String, User>(
8772
(userId) => api.login(userId, ''),
8873
initialValue: User.empty(),
8974
);
9075

91-
FormManager() {
92-
// When user ID changes, load user details
93-
selectedUserId.pipeToCommand(loadUserCommand);
94-
}
76+
// When user ID changes, load user details
77+
late final selectedUserId = ValueNotifier<String>('')
78+
..pipeToCommand(loadUserCommand);
9579

9680
void dispose() {
9781
selectedUserId.dispose();

code_samples/lib/command_it/command_chaining_transform.dart

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,15 @@ final api = ApiClient();
66

77
// #region transform_basic
88
class UserManager {
9-
final selectedUserId = ValueNotifier<int>(0);
10-
119
// Command expects String, but we have int
1210
late final fetchUserCommand = Command.createAsync<String, User>(
1311
(userId) => api.login(userId, ''),
1412
initialValue: User.empty(),
1513
);
1614

17-
UserManager() {
18-
// Transform int to String
19-
selectedUserId.pipeToCommand(
20-
fetchUserCommand,
21-
transform: (id) => id.toString(),
22-
);
23-
}
15+
// Transform int to String
16+
late final selectedUserId = ValueNotifier<int>(0)
17+
..pipeToCommand(fetchUserCommand, transform: (id) => id.toString());
2418
}
2519
// #endregion transform_basic
2620

@@ -33,46 +27,37 @@ class FetchParams {
3327
}
3428

3529
class DetailedUserManager {
36-
final selectedUserId = ValueNotifier<String>('');
37-
3830
late final fetchUserCommand = Command.createAsync<FetchParams, User>(
3931
(params) => api.login(params.userId, ''),
4032
initialValue: User.empty(),
4133
);
4234

43-
DetailedUserManager() {
44-
// Transform simple ID to complex params object
45-
selectedUserId.pipeToCommand(
35+
// Transform simple ID to complex params object
36+
late final selectedUserId = ValueNotifier<String>('')
37+
..pipeToCommand(
4638
fetchUserCommand,
4739
transform: (id) => FetchParams(id, includeDetails: true),
4840
);
49-
}
5041
}
5142
// #endregion transform_complex
5243

5344
// #region transform_result
5445
class ResultTransformManager {
55-
late final saveCommand = Command.createAsync<Data, Data>(
56-
(data) async {
57-
await api.save(data);
58-
return data;
59-
},
60-
initialValue: Data.empty(),
61-
);
62-
6346
// Notification command only needs a message
6447
late final notifyCommand = Command.createSync<String, void>(
6548
(message) => debugPrint('Notification: $message'),
6649
initialValue: null,
6750
);
6851

69-
ResultTransformManager() {
70-
// Transform Data result to notification message
71-
saveCommand.pipeToCommand(
72-
notifyCommand,
73-
transform: (data) => 'Saved item: ${data.id}',
74-
);
75-
}
52+
// Transform Data result to notification message
53+
late final saveCommand = Command.createAsync<Data, Data>(
54+
(data) async {
55+
await api.save(data);
56+
return data;
57+
},
58+
initialValue: Data.empty(),
59+
)..pipeToCommand(notifyCommand,
60+
transform: (data) => 'Saved item: ${data.id}');
7661
}
7762
// #endregion transform_result
7863

0 commit comments

Comments
 (0)