Skip to content

Commit b2c3968

Browse files
committed
feat(wip): cleanup material style, enhance validation handling and error management in controllers
1 parent 09439ee commit b2c3968

File tree

10 files changed

+242
-195
lines changed

10 files changed

+242
-195
lines changed

packages/dogs_flutter/demo/lib/main.dart

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,34 @@ final router = GoRouter(
8484
);
8585
},
8686
),
87+
88+
GoRoute(
89+
path: "/binder/nested",
90+
builder: (context, state) {
91+
return BinderPreview(
92+
z.object({
93+
"name": z.string().formLabel("Name"),
94+
"age": z.integer().formLabel("Age"),
95+
"isActive": z.boolean().formLabel("Is Active"),
96+
"address": z.object({
97+
"street": z.string().formLabel("Street"),
98+
"city": z.string().formLabel("City"),
99+
"zipCode": z.string().formLabel("Zip Code"),
100+
}).formLabel("Address"),
101+
}),
102+
exampleValue: {
103+
"name": "John Doe",
104+
"age": 30,
105+
"isActive": true,
106+
"address": {
107+
"street": "123 Main St",
108+
"city": "Anytown",
109+
"zipCode": "12345",
110+
},
111+
},
112+
);
113+
},
114+
),
87115
],
88116
);
89117

@@ -122,7 +150,7 @@ class _BinderPreviewState extends State<BinderPreview> {
122150
top: 8,
123151
left: 0,
124152
right: 0,
125-
child: StructureBinding(controller: controller),
153+
child: StructureBinding(controller: controller, validationTrigger: ValidationTrigger.onInteraction,),
126154
),
127155
Positioned(
128156
bottom: 0,
@@ -207,3 +235,13 @@ class DogsDemoApp extends StatelessWidget {
207235
);
208236
}
209237
}
238+
239+
class EmptyPage extends StatelessWidget {
240+
const EmptyPage({super.key});
241+
242+
@override
243+
Widget build(BuildContext context) {
244+
return Scaffold();
245+
}
246+
}
247+

packages/dogs_flutter/demo/pubspec.lock

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -183,21 +183,21 @@ packages:
183183
path: "../../dogs_core"
184184
relative: true
185185
source: path
186-
version: "10.0.0-dev.3"
186+
version: "10.0.0-dev.4"
187187
dogs_flutter:
188188
dependency: "direct main"
189189
description:
190190
path: ".."
191191
relative: true
192192
source: path
193-
version: "0.0.1-dev.5"
193+
version: "0.0.1-dev.6"
194194
dogs_generator:
195195
dependency: "direct dev"
196196
description:
197197
path: "../../dogs_generator"
198198
relative: true
199199
source: path
200-
version: "7.0.0-dev.3"
200+
version: "7.0.0-dev.4"
201201
duffer:
202202
dependency: transitive
203203
description:
@@ -210,10 +210,10 @@ packages:
210210
dependency: transitive
211211
description:
212212
name: fake_async
213-
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
213+
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
214214
url: "https://pub.dev"
215215
source: hosted
216-
version: "1.3.2"
216+
version: "1.3.3"
217217
file:
218218
dependency: transitive
219219
description:
@@ -337,26 +337,26 @@ packages:
337337
dependency: transitive
338338
description:
339339
name: leak_tracker
340-
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
340+
sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0"
341341
url: "https://pub.dev"
342342
source: hosted
343-
version: "10.0.8"
343+
version: "11.0.1"
344344
leak_tracker_flutter_testing:
345345
dependency: transitive
346346
description:
347347
name: leak_tracker_flutter_testing
348-
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
348+
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
349349
url: "https://pub.dev"
350350
source: hosted
351-
version: "3.0.9"
351+
version: "3.0.10"
352352
leak_tracker_testing:
353353
dependency: transitive
354354
description:
355355
name: leak_tracker_testing
356-
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
356+
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
357357
url: "https://pub.dev"
358358
source: hosted
359-
version: "3.0.1"
359+
version: "3.0.2"
360360
lints:
361361
dependency: transitive
362362
description:
@@ -582,10 +582,10 @@ packages:
582582
dependency: transitive
583583
description:
584584
name: test_api
585-
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
585+
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
586586
url: "https://pub.dev"
587587
source: hosted
588-
version: "0.7.4"
588+
version: "0.7.6"
589589
timing:
590590
dependency: transitive
591591
description:
@@ -614,10 +614,10 @@ packages:
614614
dependency: transitive
615615
description:
616616
name: vector_math
617-
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
617+
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
618618
url: "https://pub.dev"
619619
source: hosted
620-
version: "2.1.4"
620+
version: "2.2.0"
621621
vm_service:
622622
dependency: transitive
623623
description:
@@ -667,5 +667,5 @@ packages:
667667
source: hosted
668668
version: "3.1.3"
669669
sdks:
670-
dart: ">=3.7.2 <4.0.0"
670+
dart: ">=3.8.0-0 <4.0.0"
671671
flutter: ">=3.27.0"

packages/dogs_flutter/example/lib/main.dart

Lines changed: 60 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:dogs_core/dogs_schema.dart' as z;
1+
import 'package:dogs_core/dogs_schema.dart';
22
import 'package:dogs_flutter/databinding/material/list.dart';
33
import 'package:dogs_flutter/dogs_flutter.dart';
44
import 'package:example/dogs.g.dart';
@@ -47,36 +47,56 @@ class _TestFormState extends State<TestForm> {
4747
// // ),
4848
// );
4949

50-
final mainSchema = z.object({
51-
"name": z.string(),
52-
"surname": z.string(),
53-
"age": z.integer(),
54-
"subschema": z.object({"subfield1": z.string(), "subfield2": z.integer()}).serialName("SubSchema").formHelper("Helper").formLabel("My Label"),
55-
"list": z.array(
56-
z.integer(),
57-
).formLabel("My List").formHelper("Hello World!").itemLabel("Item").addButtonLabel("Add Item").optional(),
50+
final mainSchema = object({
51+
"name": string(),
52+
"surname": string(),
53+
"age": integer(),
54+
"subschema": object({
55+
"subfield1": string(),
56+
"subfield2": integer(),
57+
"address": object({"street": string(), "city": string()}),
58+
}).serialName("SubSchema").formHelper("Helper").formLabel("My Label"),
59+
"list":
60+
array(integer())
61+
.formLabel("My List")
62+
.formHelper("Hello World!")
63+
.itemLabel("Item")
64+
.addButtonLabel("Add Item")
65+
.optional(),
5866

59-
"complexList": z.array(
60-
z.object({
61-
"field1": z.string(),
62-
"field2": z.integer(),
63-
})
64-
).itemLabel("Complex Item"),
67+
"complexList": object({"field1": string(), "field2": integer()}).array().itemLabel("Complex Item"),
6568

66-
"enum": z.enumeration(["option1", "option2", "option3"]),
69+
"enum": enumeration(["option1", "option2", "option3"]),
6770
});
6871

69-
late final controller = StructureBindingController.schema(schema: mainSchema);
72+
late final controller = StructureBindingController.schema(
73+
schema: mainSchema,
74+
initialValue: {
75+
"name": "Alex",
76+
"surname": "Boe",
77+
"age": 99,
78+
"subschema": {
79+
"subfield1": "initial",
80+
"subfield2": 123,
81+
"address": {"street": "123 Other St", "city": "New York"},
82+
},
83+
"list": [],
84+
"complexList": [
85+
{"field1": "value1", "field2": 1},
86+
],
87+
"enum": "option1",
88+
},
89+
);
7090

7191
@override
7292
Widget build(BuildContext context) {
7393
return Scaffold(
7494
body: Theme(
75-
data: Theme.of(
76-
context,
77-
).copyWith(inputDecorationTheme: InputDecorationTheme(
78-
// border: OutlineInputBorder(),
79-
)),
95+
data: Theme.of(context).copyWith(
96+
inputDecorationTheme: InputDecorationTheme(
97+
// border: OutlineInputBorder(),
98+
),
99+
),
80100
child: Center(
81101
child: SizedBox(
82102
width: 600,
@@ -106,7 +126,14 @@ class _TestFormState extends State<TestForm> {
106126
"name": "John",
107127
"surname": "Doe",
108128
"age": 21,
109-
"subschema": {"subfield1": "value1", "subfield2": 42},
129+
"subschema": {
130+
"subfield1": "value1",
131+
"subfield2": 42,
132+
"address": {
133+
"street": "123 Main St",
134+
"city": "Metropolis",
135+
},
136+
},
110137
"enum": "option2",
111138
});
112139

@@ -116,6 +143,16 @@ class _TestFormState extends State<TestForm> {
116143
},
117144
child: const Text("Load"),
118145
),
146+
147+
ElevatedButton(
148+
onPressed: () {
149+
controller.reset();
150+
setState(() {
151+
// Update the state to trigger a rebuild
152+
});
153+
},
154+
child: const Text("Reset"),
155+
),
119156
],
120157
),
121158
),

0 commit comments

Comments
 (0)