Skip to content

Commit 1672864

Browse files
committed
Removed group_radio_button, made own implementation with label fix. Closes #376, #335
1 parent 9418233 commit 1672864

File tree

4 files changed

+366
-45
lines changed

4 files changed

+366
-45
lines changed

lib/src/fields/form_builder_radio_group.dart

Lines changed: 61 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter/widgets.dart';
33
import 'package:flutter_form_builder/flutter_form_builder.dart';
4-
import 'package:group_radio_button/group_radio_button.dart';
4+
import 'package:flutter_form_builder/src/widgets/grouped_checkbox.dart';
5+
import 'package:flutter_form_builder/src/widgets/grouped_radio.dart';
56

67
class FormBuilderRadioGroup extends StatefulWidget {
78
final String attribute;
@@ -12,15 +13,29 @@ class FormBuilderRadioGroup extends StatefulWidget {
1213
final ValueChanged onChanged;
1314
final ValueTransformer valueTransformer;
1415

15-
final bool leadingInput;
1616
final List<FormBuilderFieldOption> options;
1717
final MaterialTapTargetSize materialTapTargetSize;
1818
final Color activeColor;
1919
final FormFieldSetter onSaved;
20-
final EdgeInsets contentPadding;
21-
final Axis direction;
22-
final MainAxisAlignment horizontalAlignment;
23-
final double spaceBetween;
20+
final Color focusColor;
21+
final Color hoverColor;
22+
final List disabled;
23+
final Axis wrapDirection;
24+
final WrapAlignment wrapAlignment;
25+
26+
final double wrapSpacing;
27+
28+
final WrapAlignment wrapRunAlignment;
29+
30+
final double wrapRunSpacing;
31+
32+
final WrapCrossAlignment wrapCrossAxisAlignment;
33+
34+
final VerticalDirection wrapVerticalDirection;
35+
final TextDirection wrapTextDirection;
36+
final Widget separator;
37+
final ControlAffinity controlAffinity; // = ControlAffinity.leading;
38+
final GroupedRadioOrientation orientation; // = GroupedRadioOrientation.wrap;
2439

2540
FormBuilderRadioGroup({
2641
Key key,
@@ -32,14 +47,23 @@ class FormBuilderRadioGroup extends StatefulWidget {
3247
this.decoration = const InputDecoration(),
3348
this.onChanged,
3449
this.valueTransformer,
35-
this.leadingInput = false,
50+
this.onSaved,
3651
this.materialTapTargetSize,
52+
this.wrapDirection = Axis.horizontal,
53+
this.wrapAlignment = WrapAlignment.start,
54+
this.wrapSpacing = 0.0,
55+
this.wrapRunAlignment = WrapAlignment.start,
56+
this.wrapRunSpacing = 0.0,
57+
this.wrapCrossAxisAlignment = WrapCrossAlignment.start,
58+
this.wrapVerticalDirection = VerticalDirection.down,
59+
this.controlAffinity = ControlAffinity.leading,
60+
this.orientation = GroupedRadioOrientation.wrap,
3761
this.activeColor,
38-
this.onSaved,
39-
this.contentPadding = const EdgeInsets.all(0.0),
40-
this.direction = Axis.horizontal,
41-
this.horizontalAlignment = MainAxisAlignment.start,
42-
this.spaceBetween,
62+
this.focusColor,
63+
this.hoverColor,
64+
this.disabled,
65+
this.wrapTextDirection,
66+
this.separator,
4367
}) : super(key: key);
4468

4569
@override
@@ -87,37 +111,39 @@ class _FormBuilderRadioGroupState extends State<FormBuilderRadioGroup> {
87111
} else {
88112
_formState?.setAttributeValue(widget.attribute, val);
89113
}
90-
if (widget.onSaved != null) {
91-
widget.onSaved(transformed ?? val);
92-
}
114+
widget.onSaved?.call(transformed ?? val);
93115
},
94116
builder: (FormFieldState<dynamic> field) {
95117
return InputDecorator(
96118
decoration: widget.decoration.copyWith(
97119
enabled: !_readOnly,
98120
errorText: field.errorText,
99121
),
100-
child: RadioGroup.builder(
101-
groupValue: field.value,
102-
onChanged: _readOnly
103-
? null
104-
: (value) {
105-
FocusScope.of(context).requestFocus(FocusNode());
106-
field.didChange(value);
107-
widget.onChanged?.call(value);
108-
},
109-
items: widget.options
110-
.map((option) => option.value)
111-
.toList(growable: false),
112-
itemBuilder: (item) {
113-
return RadioButtonBuilder(
114-
item.toString(),
115-
textPosition: RadioButtonTextPosition.right,
116-
);
122+
child: GroupedRadio(
123+
orientation: widget.orientation,
124+
value: field.value,
125+
options: widget.options,
126+
onChanged: (val) {
127+
field.didChange(val);
128+
widget.onChanged?.call(val);
117129
},
118-
direction: widget.direction,
119-
horizontalAlignment: widget.horizontalAlignment,
120-
spacebetween: widget.spaceBetween,
130+
activeColor: widget.activeColor,
131+
focusColor: widget.focusColor,
132+
materialTapTargetSize: widget.materialTapTargetSize,
133+
disabled: !_readOnly
134+
? widget.disabled
135+
: widget.options.map((e) => e.value).toList(),
136+
hoverColor: widget.hoverColor,
137+
wrapAlignment: widget.wrapAlignment,
138+
wrapCrossAxisAlignment: widget.wrapCrossAxisAlignment,
139+
wrapDirection: widget.wrapDirection,
140+
wrapRunAlignment: widget.wrapRunAlignment,
141+
wrapRunSpacing: widget.wrapRunSpacing,
142+
wrapSpacing: widget.wrapSpacing,
143+
wrapTextDirection: widget.wrapTextDirection,
144+
wrapVerticalDirection: widget.wrapVerticalDirection,
145+
separator: widget.separator,
146+
controlAffinity: widget.controlAffinity,
121147
),
122148
);
123149
},

0 commit comments

Comments
 (0)