Flutter Radio Widget with Custom Radio Buttons
In this tutorial, you will learn how to use the Radio Widget in Flutter to create radio buttons and custom radio buttons. The Radio Widget is a simple way to allow users to select one option from a list of options.
This Flutter code demonstrates the usage of the Radio widget and creating custom radio buttons in a Flutter app. The Radio widget is used to implement a group of radio buttons with a common purpose, where only one radio button can be selected at a time.
Code Sample:
Radio<int>(
value: index,
groupValue: radioValue,
onChanged: handleRadioValueChanged,
),
..
Properties:
- value (required): The value of the radio button.
- groupValue (required): The currently selected value of the radio button group.
- onChanged (required): A callback function that is called when the radio button is selected. The function should update the groupValue with the value of the selected radio button.
- activeColor: The color of the radio button when it is selected.
- fillColor: The color of the radio button when it is not selected.
- focusColor: The color of the radio button when it is focused.
- hoverColor: The color of the radio button when the pointer is hovering over it.
- visualDensity: The density of the visual components of the radio button.
- materialTapTargetSize: The size of the tap target for the radio button.
- toggleable: Whether the radio button can be toggled on and off. If set to true, the selected radio button can be deselected by tapping it again.
import 'package:flutter/material.dart';
class BasicWidgetRadio extends StatefulWidget {
const BasicWidgetRadio({Key? key}) : super(key: key);
@override
State<BasicWidgetRadio> createState() => BasicWidgetRadioState();
}
class BasicWidgetRadioState extends State<BasicWidgetRadio> {
int radioValue = 0;
// function to handle changes in radio button value
void handleRadioValueChanged(int? value) {
setState(() {
radioValue = value!;
});
}
int _selectedValue = 0;
// function to handle changes in custom radio button value
void _onRadioValueChanged(int value) {
setState(() {
_selectedValue = value;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max, // set mainAxisSize to max
children: [
// .................................................. radio
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
for (int index = 0; index < 2; ++index)
Radio(
value: index,
groupValue: radioValue,
onChanged: handleRadioValueChanged,
),
],
),
// Disabled radio buttons
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
for (int index = 0; index < 2; ++index)
Radio<int>(
value: index,
groupValue: radioValue,
onChanged: null,
),
],
),
// Custom radio button
CustomRadioWidget(
valueChanged: _onRadioValueChanged,
initialValue: _selectedValue,
),
]),
),
));
}
}
class CustomRadioWidget extends StatefulWidget {
final Function(int) valueChanged;
final int initialValue;
// constructor for custom radio button widget
const CustomRadioWidget({Key? key, required this.valueChanged, this.initialValue = 0}) : super(key: key);
@override
State createState() => _CustomRadioWidgetState();
}
class _CustomRadioWidgetState extends State<CustomRadioWidget> {
int _value = 0;
@override
void initState() {
super.initState();
_value = widget.initialValue;
}
// function to create custom radio buttons
Widget customRadioButton(String text, IconData iconData, int index) {
return Padding(
padding: const EdgeInsets.all(5),
child: OutlinedButton(
onPressed: () {
setState(() {
_value = index;
widget.valueChanged(_value);
});
},
style: OutlinedButton.styleFrom(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40),
),
side: BorderSide(
color: (_value == index) ? Colors.blue : Colors.grey,
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(
iconData,
color: (_value == index) ? Colors.blue : Colors.grey,
),
],
),
),
);
}
@override
Widget build(BuildContext context) {
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
customRadioButton("", Icons.male, 1),
customRadioButton("", Icons.female, 2),
customRadioButton("", Icons.category, 3)
],
);
}
}
Comments
Post a Comment