Skip to content

Commit b3d1d04

Browse files
committed
Merge remote-tracking branch 'upstream/version_4' into version_4
2 parents ade4df0 + d098829 commit b3d1d04

33 files changed

+302
-316
lines changed

.github/workflows/main.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ name: CI
66
# events but only for the master branch
77
on:
88
push:
9-
branches: [ master ]
9+
branches: [ master, version_4 ]
1010
pull_request:
11-
branches: [ master ]
11+
branches: [ master, version_4 ]
1212

1313
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
1414
jobs:

example/lib/home_page.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ class HomePage extends StatelessWidget {
1010
Widget build(BuildContext context) {
1111
return Scaffold(
1212
appBar: AppBar(
13-
title: Text('Flutter Form Builder'),
13+
title: const Text('Flutter Form Builder'),
1414
),
1515
body: ListView(
1616
children: <Widget>[
1717
ListTile(
18-
title: Text('Complete Form'),
19-
trailing: Icon(CupertinoIcons.right_chevron),
18+
title: const Text('Complete Form'),
19+
trailing: const Icon(CupertinoIcons.right_chevron),
2020
onTap: () {
2121
return Navigator.of(context).push(
2222
MaterialPageRoute(
@@ -31,10 +31,10 @@ class HomePage extends StatelessWidget {
3131
);
3232
},
3333
),
34-
Divider(),
34+
const Divider(),
3535
ListTile(
36-
title: Text('Signup Form'),
37-
trailing: Icon(CupertinoIcons.right_chevron),
36+
title: const Text('Signup Form'),
37+
trailing: const Icon(CupertinoIcons.right_chevron),
3838
onTap: () {
3939
return Navigator.of(context).push(
4040
MaterialPageRoute(
@@ -49,7 +49,7 @@ class HomePage extends StatelessWidget {
4949
);
5050
},
5151
),
52-
Divider(),
52+
const Divider(),
5353
],
5454
),
5555
);

example/lib/sources/complete_form.dart

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class CompleteFormState extends State<CompleteForm> {
2828
@override
2929
Widget build(BuildContext context) {
3030
return Padding(
31-
padding: EdgeInsets.all(10),
31+
padding: const EdgeInsets.all(10),
3232
child: SingleChildScrollView(
3333
child: Column(
3434
children: <Widget>[
@@ -56,7 +56,7 @@ class CompleteFormState extends State<CompleteForm> {
5656
decoration: InputDecoration(labelText: 'Location'),
5757
onChanged: _onChanged,
5858
),
59-
SizedBox(height: 15),
59+
const SizedBox(height: 15),
6060
FormBuilderFilterChip(
6161
name: 'filter_chip',
6262
readOnly: true,
@@ -240,8 +240,8 @@ class CompleteFormState extends State<CompleteForm> {
240240
decoration: InputDecoration(
241241
labelText: 'Age',
242242
suffixIcon: _ageHasError
243-
? Icon(Icons.error, color: Colors.red)
244-
: Icon(Icons.check, color: Colors.green),
243+
? const Icon(Icons.error, color: Colors.red)
244+
: const Icon(Icons.check, color: Colors.green),
245245
),
246246
onChanged: (val) {
247247
setState(() {
@@ -265,8 +265,8 @@ class CompleteFormState extends State<CompleteForm> {
265265
decoration: InputDecoration(
266266
labelText: 'Gender',
267267
suffix: _genderHasError
268-
? Icon(Icons.error)
269-
: Icon(Icons.check),
268+
? const Icon(Icons.error)
269+
: const Icon(Icons.check),
270270
),
271271
// initialValue: 'Male',
272272
allowClear: true,
@@ -276,7 +276,7 @@ class CompleteFormState extends State<CompleteForm> {
276276
items: genderOptions
277277
.map((gender) => DropdownMenuItem(
278278
value: gender,
279-
child: Text('$gender'),
279+
child: Text(gender),
280280
))
281281
.toList(),
282282
onChanged: (val) {
@@ -327,7 +327,7 @@ class CompleteFormState extends State<CompleteForm> {
327327
options: ['Dart', 'Kotlin', 'Java', 'Swift', 'Objective-C']
328328
.map((lang) => FormBuilderFieldOption(
329329
value: lang,
330-
child: Text('$lang'),
330+
child: Text(lang),
331331
))
332332
.toList(growable: false),
333333
controlAffinity: ControlAffinity.trailing,
@@ -343,8 +343,9 @@ class CompleteFormState extends State<CompleteForm> {
343343
.map((number) => FormBuilderFieldOption(
344344
value: number,
345345
child: Text(
346-
'$number',
347-
style: TextStyle(fontWeight: FontWeight.bold),
346+
number.toString(),
347+
style: const TextStyle(
348+
fontWeight: FontWeight.bold),
348349
),
349350
))
350351
.toList(),
@@ -362,8 +363,8 @@ class CompleteFormState extends State<CompleteForm> {
362363
initialValue: 10,
363364
step: 1,
364365
iconSize: 48.0,
365-
addIcon: Icon(Icons.arrow_right),
366-
subtractIcon: Icon(Icons.arrow_left),
366+
addIcon: const Icon(Icons.arrow_right),
367+
subtractIcon: const Icon(Icons.arrow_left),
367368
),
368369
FormBuilderRating(
369370
decoration:
@@ -378,16 +379,16 @@ class CompleteFormState extends State<CompleteForm> {
378379
decoration: const InputDecoration(
379380
labelText: 'The language of my people'),
380381
name: 'languages',
381-
initialValue: ['Dart'],
382-
options: [
382+
initialValue: const ['Dart'],
383+
options: const [
383384
FormBuilderFieldOption(value: 'Dart'),
384385
FormBuilderFieldOption(value: 'Kotlin'),
385386
FormBuilderFieldOption(value: 'Java'),
386387
FormBuilderFieldOption(value: 'Swift'),
387388
FormBuilderFieldOption(value: 'Objective-C'),
388389
],
389390
onChanged: _onChanged,
390-
separator: VerticalDivider(
391+
separator: const VerticalDivider(
391392
width: 10,
392393
thickness: 5,
393394
color: Colors.red,
@@ -407,7 +408,7 @@ class CompleteFormState extends State<CompleteForm> {
407408
decoration: const InputDecoration(labelText: 'Pick Photos'),
408409
maxImages: 1,
409410
),
410-
SizedBox(height: 15),
411+
const SizedBox(height: 15),
411412
FormBuilderPhoneField(
412413
name: 'phone_number',
413414
decoration: const InputDecoration(
@@ -424,13 +425,13 @@ class CompleteFormState extends State<CompleteForm> {
424425
errorText: 'This field required'),
425426
]),
426427
),
427-
SizedBox(height: 15),
428+
const SizedBox(height: 15),
428429
FormBuilderFilePicker(
429430
name: 'files',
430431
previewImages: false,
431432
decoration: InputDecoration(labelText: 'Files filed'),
432433
),
433-
SizedBox(height: 15),
434+
const SizedBox(height: 15),
434435
],
435436
),
436437
),
@@ -439,7 +440,7 @@ class CompleteFormState extends State<CompleteForm> {
439440
Expanded(
440441
child: MaterialButton(
441442
color: Theme.of(context).accentColor,
442-
child: Text(
443+
child: const Text(
443444
'Submit',
444445
style: TextStyle(color: Colors.white),
445446
),
@@ -453,12 +454,13 @@ class CompleteFormState extends State<CompleteForm> {
453454
},
454455
),
455456
),
456-
SizedBox(width: 20),
457+
const SizedBox(width: 20),
457458
Expanded(
458459
child: OutlineButton(
459460
focusNode: FocusNode(),
460461
color: Theme.of(context).accentColor,
461-
child: Text('Reset', style: TextStyle(color: Colors.white)),
462+
child: const Text('Reset',
463+
style: TextStyle(color: Colors.white)),
462464
onPressed: () {
463465
_formKey.currentState.reset();
464466
},

example/lib/sources/signup_form.dart

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class _SignupFormState extends State<SignupForm> {
2727
FormBuilderValidators.required(context),
2828
]),
2929
),
30-
SizedBox(height: 10),
30+
const SizedBox(height: 10),
3131
FormBuilderTextField(
3232
name: 'email',
3333
decoration: InputDecoration(labelText: 'Email'),
@@ -36,7 +36,7 @@ class _SignupFormState extends State<SignupForm> {
3636
FormBuilderValidators.email(context),
3737
]),
3838
),
39-
SizedBox(height: 10),
39+
const SizedBox(height: 10),
4040
FormBuilderTextField(
4141
name: 'password',
4242
decoration: InputDecoration(labelText: 'Password'),
@@ -46,16 +46,17 @@ class _SignupFormState extends State<SignupForm> {
4646
FormBuilderValidators.minLength(context, 6),
4747
]),
4848
),
49-
SizedBox(height: 10),
49+
const SizedBox(height: 10),
5050
FormBuilderTextField(
5151
name: 'confirm_password',
5252
decoration: InputDecoration(
53-
labelText: 'Confirm Password',
54-
suffixIcon: (_formKey.currentState != null &&
55-
!_formKey.currentState.fields['confirm_password']
56-
.isValid)
57-
? Icon(Icons.error, color: Colors.red)
58-
: Icon(Icons.check, color: Colors.green)),
53+
labelText: 'Confirm Password',
54+
suffixIcon: (_formKey.currentState != null &&
55+
!_formKey.currentState.fields['confirm_password']
56+
.isValid)
57+
? const Icon(Icons.error, color: Colors.red)
58+
: const Icon(Icons.check, color: Colors.green),
59+
),
5960
obscureText: true,
6061
validator: FormBuilderValidators.compose([
6162
/*FormBuilderValidators.equal(
@@ -72,7 +73,7 @@ class _SignupFormState extends State<SignupForm> {
7273
}
7374
]),
7475
),
75-
SizedBox(height: 10),
76+
const SizedBox(height: 10),
7677
MaterialButton(
7778
color: Theme.of(context).accentColor,
7879
child: Text(

lib/src/fields/form_builder_checkbox.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,5 @@ class FormBuilderCheckbox extends FormBuilderField<bool> {
140140
_FormBuilderCheckboxState createState() => _FormBuilderCheckboxState();
141141
}
142142

143-
class _FormBuilderCheckboxState extends FormBuilderFieldState<bool> {
144-
@override
145-
FormBuilderCheckbox get widget => super.widget as FormBuilderCheckbox;
146-
}
143+
class _FormBuilderCheckboxState
144+
extends FormBuilderFieldState<FormBuilderCheckbox, bool> {}

lib/src/fields/form_builder_checkbox_group.dart

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'package:flutter_form_builder/flutter_form_builder.dart';
44
import 'package:flutter_form_builder/src/widgets/grouped_checkbox.dart';
55

66
class FormBuilderCheckboxGroup<T> extends FormBuilderField<List<T>> {
7-
final List<FormBuilderFieldOption> options;
7+
final List<FormBuilderFieldOption<T>> options;
88
final Color activeColor;
99
final Color checkColor;
1010
final Color focusColor;
@@ -80,7 +80,7 @@ class FormBuilderCheckboxGroup<T> extends FormBuilderField<List<T>> {
8080
enabled: !state.readOnly,
8181
errorText: decoration?.errorText ?? state.errorText,
8282
),
83-
child: GroupedCheckbox(
83+
child: GroupedCheckbox<T>(
8484
orientation: orientation,
8585
value: state.value,
8686
options: options,
@@ -114,11 +114,8 @@ class FormBuilderCheckboxGroup<T> extends FormBuilderField<List<T>> {
114114

115115
@override
116116
_FormBuilderCheckboxGroupState<T> createState() =>
117-
_FormBuilderCheckboxGroupState();
117+
_FormBuilderCheckboxGroupState<T>();
118118
}
119119

120-
class _FormBuilderCheckboxGroupState<T> extends FormBuilderFieldState<List<T>> {
121-
@override
122-
FormBuilderCheckboxGroup<T> get widget =>
123-
super.widget as FormBuilderCheckboxGroup;
124-
}
120+
class _FormBuilderCheckboxGroupState<T>
121+
extends FormBuilderFieldState<FormBuilderCheckboxGroup<T>, List<T>> {}

lib/src/fields/form_builder_chips_input.dart

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ class FormBuilderChipsInput<T> extends FormBuilderField<List<T>> {
6868
onReset: onReset,
6969
decoration: decoration,
7070
focusNode: focusNode,
71-
builder: (FormFieldState field) {
72-
final _FormBuilderChipsInputState state = field;
71+
builder: (FormFieldState<List<T>> field) {
72+
final _FormBuilderChipsInputState<T> state = field;
7373

74-
return ChipsInput(
74+
return ChipsInput<T>(
7575
key: ObjectKey(state.value),
7676
initialValue: field.value,
7777
enabled: !state.readOnly,
@@ -104,10 +104,9 @@ class FormBuilderChipsInput<T> extends FormBuilderField<List<T>> {
104104
);
105105

106106
@override
107-
_FormBuilderChipsInputState<T> createState() => _FormBuilderChipsInputState();
107+
_FormBuilderChipsInputState<T> createState() =>
108+
_FormBuilderChipsInputState<T>();
108109
}
109110

110-
class _FormBuilderChipsInputState<T> extends FormBuilderFieldState<List<T>> {
111-
@override
112-
FormBuilderChipsInput<T> get widget => super.widget as FormBuilderChipsInput;
113-
}
111+
class _FormBuilderChipsInputState<T>
112+
extends FormBuilderFieldState<FormBuilderChipsInput<T>, List<T>> {}

lib/src/fields/form_builder_choice_chips.dart

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import 'package:flutter_form_builder/flutter_form_builder.dart';
44

55
class FormBuilderChoiceChip<T> extends FormBuilderField<T> {
66
/// The list of items the user can select.
7-
final List<FormBuilderFieldOption> options;
7+
final List<FormBuilderFieldOption<T>> options;
88

99
// FilterChip Settings
1010
/// Elevation to be applied on the chip relative to its parent.
@@ -307,14 +307,14 @@ class FormBuilderChoiceChip<T> extends FormBuilderField<T> {
307307
textDirection: textDirection,
308308
verticalDirection: verticalDirection,
309309
children: <Widget>[
310-
for (FormBuilderFieldOption option in options)
310+
for (FormBuilderFieldOption<T> option in options)
311311
ChoiceChip(
312312
label: option.child,
313313
selected: field.value == option.value,
314314
onSelected: state.readOnly
315315
? null
316-
: (bool selected) {
317-
var choice = selected ? option.value : null;
316+
: (selected) {
317+
final choice = selected ? option.value : null;
318318
state.requestFocus();
319319
state.didChange(choice);
320320
},
@@ -338,10 +338,9 @@ class FormBuilderChoiceChip<T> extends FormBuilderField<T> {
338338
});
339339

340340
@override
341-
_FormBuilderChoiceChipState<T> createState() => _FormBuilderChoiceChipState();
341+
_FormBuilderChoiceChipState<T> createState() =>
342+
_FormBuilderChoiceChipState<T>();
342343
}
343344

344-
class _FormBuilderChoiceChipState<T> extends FormBuilderFieldState<T> {
345-
@override
346-
FormBuilderChoiceChip<T> get widget => super.widget as FormBuilderChoiceChip;
347-
}
345+
class _FormBuilderChoiceChipState<T>
346+
extends FormBuilderFieldState<FormBuilderChoiceChip<T>, T> {}

0 commit comments

Comments
 (0)