Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 单选按钮选择未在颤振的运行时出现_Flutter - Fatal编程技术网

Flutter 单选按钮选择未在颤振的运行时出现

Flutter 单选按钮选择未在颤振的运行时出现,flutter,Flutter,我在地图上迭代,并在底部工作表中创建一个单选按钮,在我的仪表板中,我有“…”按钮,单击它会打开底部工作表。(在我的仪表板中,我调用filter.dart文件中的DashboardFilter类,该类带来底部工作表 下面是filter.dart文件 class DashboardFilter extends StatefulWidget { @override _DashboardFilterState createState() => _DashboardFilterState()

我在地图上迭代,并在底部工作表中创建一个单选按钮,在我的仪表板中,我有“…”按钮,单击它会打开底部工作表。(在我的仪表板中,我调用filter.dart文件中的DashboardFilter类,该类带来底部工作表

下面是filter.dart文件

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);
                });
              }),