我有一个单独的班级,它在首页上的单选按钮中布置了一个单独的班级。 无线电等级: 以下是来自TYPE枚举的数据,其中包含两个常规和非常规值: TYPE _dtype = TYPE.regular;
Container(
child: Row(
children: <Widget>[
Container(
width: 180.0,
child: RadioListTile<TYPE>(
title: Text(
'Regular' ,
style: TextStyle(
fontSize: 20.0,
),
),
value: TYPE.regular,
groupValue: _dtype,
onChanged: (TYPE value) { setState(() { _dtype = value; }); },
),
),
Container(
width: 186.0,
child:RadioListTile<TYPE>(
title: const Text('Non Regular',
style: TextStyle(
fontSize: 20.0,
),
),
value: TYPE.nonregular,
groupValue: _dtype,
onChanged: (TYPE value) { setState(() { _dtype = value; }); },
),
),
],
),
)
我有几个问题:
是否可以自动调整收音机的尺寸文字在吗?由于没有提供width属性,因此收音机不会出现在屏幕上。
一旦选择了一个收音机,我想将值..._ dtype传递给主页类以进行一些工作。我该怎么办?
答案 0 :(得分:0)
Container
替换为Expanded
,然后删除width属性。这将自动将行的每个子级设置为占用相等的空间。要说明为什么这样做是必要的,RadioListTile
将扩展为占用尽可能多的空间,如果未指定大小,则Container
将与其子项一样大。由于Row
具有无限的宽度,并且与您的RadioListTile
之间没有宽度限制,因此它试图扩展以占据无限的宽度,因此不会呈现。 Expanded
会在此处自动计算并应用宽度,因此无论屏幕大小如何,它都能解决问题并正常工作。
class YourRadioGrid extends StatelessWidget {
void Function(TYPE) doSomething = (t) {};
YourRadioGrid({this.doSomething});
...
onPressed: (TYPE value) {
doSomething(value);
}
}
// Then wherever in your homepage's build method this gets added:
YourRadioGrid(doSomething: (value) { /*handle the new value*/ })