@@ -100,13 +100,17 @@ class _GFRadioButtonState extends State<GFRadioButton> {
100100 }
101101
102102
103- void _handleChanged () {
104- if (widget.value == null ) {
103+ void _handleChanged (bool selected) {
104+ bool selected = false ;
105+ if (widget.value == widget.groupValue){
106+ selected = true ;
107+ }
108+ if (selected == null ) {
105109 widget.onChanged (null );
106110 return ;
107111 }
108- if (widget.value ) {
109- widget.onChanged (! widget.value);
112+ if (selected ) {
113+ widget.onChanged (widget.value);
110114 }
111115 }
112116
@@ -117,23 +121,36 @@ class _GFRadioButtonState extends State<GFRadioButton> {
117121 enabled: enabled,
118122 child: InkWell (
119123 canRequestFocus: enabled,
120- onTap: widget.onChanged != null ? () {widget.onChanged (widget.value);} : null ,
124+ onTap: widget.onChanged != null ?
125+ () {
126+ bool selected = false ;
127+ if (widget.value == widget.groupValue){
128+ selected = widget.value;
129+ }
130+ if (selected == null ) {
131+ widget.onChanged (null );
132+ }
133+ if (selected) {
134+ widget.onChanged (widget.value);
135+ }
136+ return selected;
137+ } : null ,
121138// onTap: enabled ? _handleChanged : null,
122139 child: Container (
123140 height: widget.size,
124141 width: widget.size,
125142 decoration: BoxDecoration (
126- color: widget.value ? widget.activebgColor : widget.inactivebgColor,
143+ color: enabled ? widget.activebgColor : widget.inactivebgColor,
127144 borderRadius: widget.type == GFRadioButtonType .basic
128145 ? BorderRadius .circular (50 )
129146 : widget.type == GFRadioButtonType .square
130147 ? BorderRadius .circular (0 )
131148 : BorderRadius .circular (10 ),
132149 border: Border .all (
133- color: widget.value
150+ color: enabled
134151 ? widget.activeBorderColor
135152 : widget.inactiveBorderColor)),
136- child: widget.value
153+ child: enabled
137154 ? widget.type == GFRadioButtonType .basic ||
138155 widget.type == GFRadioButtonType .square
139156 ? Stack (
0 commit comments