Flutter 单选按钮选择未在颤振的运行时出现
我在地图上迭代,并在底部工作表中创建一个单选按钮,在我的仪表板中,我有“…”按钮,单击它会打开底部工作表。(在我的仪表板中,我调用filter.dart文件中的DashboardFilter类,该类带来底部工作表 下面是filter.dart文件Flutter 单选按钮选择未在颤振的运行时出现,flutter,Flutter,我在地图上迭代,并在底部工作表中创建一个单选按钮,在我的仪表板中,我有“…”按钮,单击它会打开底部工作表。(在我的仪表板中,我调用filter.dart文件中的DashboardFilter类,该类带来底部工作表 下面是filter.dart文件 class DashboardFilter extends StatefulWidget { @override _DashboardFilterState createState() => _DashboardFilterState()
class DashboardFilter extends StatefulWidget {
@override
_DashboardFilterState createState() => _DashboardFilterState();
final ValueChanged<Map<String, bool>> parentAction;
final ValueChanged<Map<String, bool>> childAction;
int radioValue1 = -1;
DashboardFilter(
{Key key,
this.parentAction,
this.childAction,
})
: super(key: key);
}
class _DashboardFilterState extends State<DashboardFilter> {
void showModalSheet() {
List<Map<String, Object>> timeData;
timeData = [
{"id": 1, "displayId": "Daily"},
{"id": 2, "displayId": "Weekly"},
{"id": 3, "displayId": "Monthly"}
];
showModalBottomSheet<void>(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
context: context,
builder: (BuildContext context) {
return StatefulBuilder(
builder: (BuildContext context, StateSetter state) {
return createBox(context, timeData, state);
});
});
}
createBox(BuildContext context,
List<Map<String, Object>> tickbox, StateSetter state) {
DateTime toDate;
DateTime fromDate;
var tickboxdata = tickbox.map<Widget>((data) {
int id = data["id"];
var dispId = data["displayId"];
return radiogen(context, id, dispId);
}).toList();
return SingleChildScrollView(
child: LimitedBox(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
child: Column(
children: tickboxdata,
),),], ), ), );
}
void _handleRadioValueChange1(int value) {
setState(() {
widget.radioValue1 = value;
switch (widget.radioValue1) {
case 1:
print("1 selected");
break;
case 2:
break;
case 3:
break;
}
});
}
Widget radiogen(BuildContext context, int id, var disp) {
return Container(
padding: EdgeInsets.all(8.0),
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Radio(
value: id,
groupValue: widget.radioValue1,
onChanged: _handleRadioValueChange1,
),
new Text(
disp,
style: new TextStyle(fontSize: 16.0),
), ], ), ], ), );
}
@override
Widget build(BuildContext context) {
return Container(
child: IconButton(
icon: new Icon(Icons.more_horiz), onPressed: showModalSheet),
);
}
}
类DashboardFilter扩展StatefulWidget{
@凌驾
_DashboardFilterState createState()=>\u DashboardFilterState();
最终价值行动;
行动的最终价值;
int radioValue1=-1;
仪表板过滤器(
{键,
这一行动,
这是我的行动,
})
:super(key:key);
}
类\u仪表板过滤器状态扩展状态{
void showModalSheet(){
列出时间数据;
时间数据=[
{“id”:1,“displayId”:“Daily”},
{“id”:2,“displayId”:“Weekly”},
{“id”:3,“displayId”:“Monthly”}
];
showModalBottomSheet(
形状:圆形矩形边框(
边界半径:边界半径。圆形(10.0),
),
上下文:上下文,
生成器:(BuildContext上下文){
返回状态生成器(
生成器:(BuildContext上下文,StateSetter状态){
返回createBox(上下文、时间数据、状态);
});
});
}
createBox(BuildContext上下文,
列表勾选框,状态设置器状态){
日期时间;
DateTime fromDate;
var tickboxdata=tickbox.map((数据){
int id=数据[“id”];
var dispId=data[“displayId”];
返回射线技师(上下文、id、dispId);
}).toList();
返回SingleChildScrollView(
孩子:LimitedBox(
子:列(
mainAxisSize:mainAxisSize.max,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
容器(
子:列(
儿童:数据,
),),], ), ), );
}
void _handleRadioValueChange1(int值){
设置状态(){
widget.radioValue1=值;
开关(widget.radioValue1){
案例1:
打印(“选定1份”);
打破
案例2:
打破
案例3:
打破
}
});
}
Widget-radiogen(BuildContext上下文、int-id、var-disp){
返回容器(
填充:边缘设置。全部(8.0),
子:新列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
新行(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
新收音机(
值:id,
groupValue:widget.radioValue1,
一旦更改:_handleRadioValueChange1,
),
新文本(
disp,
样式:新的文本样式(fontSize:16.0),
), ], ), ], ), );
}
@凌驾
小部件构建(构建上下文){
返回容器(
孩子:我的钮扣(
图标:新图标(图标。更多水平),按下:showModalSheet),
);
}
}
我面临的问题是,一旦我选择了单选按钮,它不会显示当时选择了哪个项目,我需要再次返回并再次按下(…)按钮,然后它显示该选项已被选中
谁能帮我解决这个问题
我想问题出在设置状态上,请告诉我是否需要做任何更改?在研究您的代码后,这里是我的解决方案 您需要在Radioten小部件上设置状态设置器
Widget radiogen(BuildContext context, int id, var disp, StateSetter
stateSetter) {
return Container(
padding: EdgeInsets.all(8.0),
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Radio(
value: id,
groupValue: widget.radioValue1,
onChanged: (value) {
stateSetter(() {
_handleRadioValueChange1(value);
});
}),
new Text(
disp,
style: new TextStyle(fontSize: 16.0),
),
],
),
],
),
);
}
createBox(BuildContext context, List<Map<String, Object>> tickbox,
StateSetter state) {
DateTime toDate;
DateTime fromDate;
var tickboxdata = tickbox.map<Widget>((data) {
int id = data["id"];
var dispId = data["displayId"];
return radiogen(context, id, dispId, state);
}).toList();
return SingleChildScrollView(
child: LimitedBox(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
child: Column(
children: tickboxdata,
),
),
],
),
),
);
}
Radio(
value: id,
groupValue: widget.radioValue1,
onChanged: (value) {
stateSetter(() {
_handleRadioValueChange1(value);
});
}),