重新设计了 Radio 组件
概述
#引入了 RadioGroup
组件,用于集中管理一组 Radio
组件的 groupValue
和 onChanged
回调。因此,Radio.groupValue
和 Radio.onChanged
这两个单独的属性已被弃用。
背景
#为了满足 APG(ARIA 实践指南)对键盘导航和单选按钮组语义属性的要求,Flutter 需要一个专门的单选组概念。引入包装组件 RadioGroup
提供了开箱即用的支持。这一更改也提供了一个机会,可以简化单独 Radio
组件的 API。
变更说明
#以下 API 已被弃用
Radio.onChanged
Radio.groupValue
CupertinoRadio.onChanged
CupertinoRadio.groupValue
RadioListTile.groupValue
RadioListTile.onChanged
.
迁移指南
#如果您正在使用这些属性,可以使用 RadioGroup
进行重构。
情况 1:普通情况
#迁移前的代码
dart
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Radio<int>(
value: 0,
groupValue: _groupValue,
onChanged: (int? value) {
setState(() {
_groupValue = value;
});
},
),
Radio<int>(
value: 2,
groupValue: _groupValue,
onChanged: (int? value) {
setState(() {
_groupValue = value;
});
},
),
],
);
}
迁移后的代码
dart
Widget build(BuildContext context) {
return RadioGroup<int>(
groupValue: _groupValue,
onChanged: (int? value) {
setState(() {
_groupValue = value;
});
},
child: Column(
children: <Widget>[
Radio<int>(value: 0),
Radio<int>(value: 2),
],
),
);
}
情况 2:禁用 Radio
#迁移前的代码
dart
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Radio<int>(
value: 0,
groupValue: _groupValue,
onChanged: (int? value) {
setState(() {
_groupValue = value;
});
},
),
Radio<int>(
value: 2,
groupValue: _groupValue,
onChanged: null, // disabled
),
],
);
}
迁移后的代码
dart
Widget build(BuildContext context) {
return RadioGroup<int>(
groupValue: _groupValue,
onChanged: (int? value) {
setState(() {
_groupValue = value;
});
},
child: Column(
children: <Widget>[
Radio<int>(value: 0),
Radio<int>(value: 2, enabled: false),
],
),
);
}
情况 3:混合组或多选
#迁移前的代码
dart
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Radio<int>(
value: 1,
groupValue: _groupValue,
onChanged: (int? value) {
setState(() {
_groupValue = value;
});
}, // disabled
),
Radio<String>(
value: 'a',
groupValue: _stringValue,
onChanged: (String? value) {
setState(() {
_stringValue = value;
});
},
),
Radio<String>(
value: 'b',
groupValue: _stringValue,
onChanged: (String? value) {
setState(() {
_stringValue = value;
});
},
),
Radio<int>(
value: 2,
groupValue: _groupValue,
onChanged: (int? value) {
setState(() {
_groupValue = value;
});
}, // disabled
),
],
);
}
迁移后的代码
dart
Widget build(BuildContext context) {
return RadioGroup<int>(
groupValue: _groupValue,
onChanged: (int? value) {
setState(() {
_groupValue = value;
});
},
child: Column(
children: <Widget>[
Radio<int>(value: 1),
RadioGroup<String>(
child: Column(
children: <Widget>[
Radio<String>(value: 'a'),
Radio<String>(value: 'b'),
]
),
),
Radio<int>(value: 2),
],
),
);
}
时间线
#生效版本:尚未发布
稳定版本:尚未发布
参考资料
#API 文档
相关议题
相关 PR