Java 如何在Flatter/Dart(Android)中创建动态无线电组

Java 如何在Flatter/Dart(Android)中创建动态无线电组,java,android,dart,flutter,android-radiogroup,Java,Android,Dart,Flutter,Android Radiogroup,下面是我用来在简单的android中创建的代码,我必须为颤振/飞镖做些什么,我对颤振/android是完全陌生的 public static void setCustomRadioGroup(LinearLayout layout, Context context, ArrayList<String> setName, ArrayList<View> viewList) { int sizeOfList = setName.size();

下面是我用来在简单的android中创建的代码,我必须为颤振/飞镖做些什么,我对颤振/android是完全陌生的

  public static void setCustomRadioGroup(LinearLayout layout, Context context, ArrayList<String> setName, ArrayList<View> viewList) {
        int sizeOfList = setName.size();
        final RadioButton[] radioButtons = new RadioButton[setName.size()];
        RadioGroup radioGroup = new RadioGroup(context);
        System.out.println(layout.getTag()+"_RadioGroup"+"   this is tag from dynamic layout creation");
        //set this in constant afterweard while dry run
        radioGroup.setTag(layout.getTag()+"_RadioGroup");
//      /*  LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
//                LinearLayout.LayoutParams.MATCH_PARENT,
//                LinearLayout.LayoutParams.WRAP_CONTENT
//        );
//        layout.addView(radioGroup, params);*/

        //radioGroup.setTag();//create the RadioGroup
        if (setName.size() < 3) {
            radioGroup.setOrientation(RadioGroup.HORIZONTAL);
        } else {
            radioGroup.setOrientation(RadioGroup.VERTICAL);
        }
        //or RadioGroup.VERTICAL
        for (int i = 0; i < setName.size(); i++) {
            radioButtons[i] = new RadioButton(context);
            radioButtons[i].setText(setName.get(i));
            String id = layout.getTag()+setName.get(i);
//            radioButtons[i].setId(id.hashCode());
           // Log.v("Selected", "New radio item id in Dynamic fiels: " + id.hashCode());

            radioGroup.addView(radioButtons[i]);
        }
        layout.addView(radioGroup);
        viewList.add(radioGroup);
publicstaticvoidsetcustomradiogroup(LinearLayout布局、上下文上下文、arraylistsetname、arraylistviewlist){
int-sizeOfList=setName.size();
最终单选按钮[]单选按钮=新单选按钮[setName.size()];
放射组放射组=新放射组(上下文);
System.out.println(layout.getTag()+“_RadioGroup”+“这是动态布局创建中的标记”);
//在干运行时,将其设置为恒定后磨损
radioGroup.setTag(layout.getTag()+“_radioGroup”);
///*LinearLayout.LayoutParams params=新的LinearLayout.LayoutParams(
//LinearLayout.LayoutParams.MATCH_父级,
//LinearLayout.LayoutParams.WRAP_内容
//        );
//layout.addView(放射组,参数)*/
//radioGroup.setTag();//创建radioGroup
if(setName.size()<3){
放射组设置方向(放射组水平);
}否则{
放射组设置方向(放射组垂直);
}
//或放射组
对于(int i=0;i
请参见颤振提供创建单选按钮列表的两种方法,或者使用 或
如果您需要进一步的帮助,请告诉我以下是一个示例代码块,用于动态创建无线组列表

Column(
  crossAxisAlignment: CrossAxisAlignment.start,
  children: _options
      .map((e) => new Column(
            children: [
              Container(
                margin: EdgeInsets.symmetric(vertical: 5),
                decoration: BoxDecoration(
                  border: Border.all(
                    width: 2,
                  ),
                  borderRadius: BorderRadius.circular(12.0),
                ),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.stretch,
                  children: e.subOptions
                      .map((x) => RadioListTile(
                            value: x.optionBit, //set this to parent object of the 
                                                //group which determines the selected option.
                            groupValue: e.optionBit,
                            onChanged: (value) {
                              setState(() {
                                e.optionBit = value;
                              });
                            },
                            title: new Text(
                              x.text,
                            ),
                          ))
                      .toList(),
                ),
              )
            ],
          ))
      .toList(),
),

选项\u项目.省道

class OptionsItem {
  String productOptionCategGuid;
  String categoryName;
  String minSelectionRequired;
  String maxSelectionLimit;
  String selectedOption; //To store selected options
  List<Items> items;

  OptionsItem({
    this.productOptionCategGuid,
    this.categoryName,
    this.minSelectionRequired,
    this.maxSelectionLimit,
    this.selectedOption,
    this.items,
  });

  OptionsItem.fromJson(Map<String, dynamic> json) {
    this.productOptionCategGuid = json["ProductOptionCategGUID"].toString();
    this.categoryName = json["CategoryName"].toString();
    this.minSelectionRequired = json["MinSelectionRequired"].toString();
    this.maxSelectionLimit = json["MaxSelectionLimit"].toString();
    this.selectedOption = json["selectedOption"].toString();
    this.items = json["Items"] == null
        ? []
        : (json["Items"] as List).map((e) => Items.fromJson(e)).toList();
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data["ProductOptionCategGUID"] = this.productOptionCategGuid;
    data["CategoryName"] = this.categoryName;
    data["MinSelectionRequired"] = this.minSelectionRequired;
    data["MaxSelectionLimit"] = this.maxSelectionLimit;
    data["selectedOption"] = this.selectedOption;
    if (this.items != null)
      data["Items"] = this.items.map((e) => e.toJson()).toList();
    return data;
  }
}
class Items {
  String optionItemGuid;
  String optionItemName;
  String price;

  Items({this.optionItemGuid, this.optionItemName, this.price});

  Items.fromJson(Map<String, dynamic> json) {
    this.optionItemGuid = json["OptionItemGuid"].toString();
    this.optionItemName = json["OptionItemName"].toString();
    this.price = json["Price"].toString();
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data["OptionItemGuid"] = this.optionItemGuid;
    data["OptionItemName"] = this.optionItemName;
    data["Price"] = this.price;
    return data;
  }
}
class WidgetItemFlavour extends StatefulWidget {
  final OptionsItem item;
  WidgetItemFlavour({this.item});

  @override
  _WidgetItemFlavourState createState() => _WidgetItemFlavourState();
}

class _WidgetItemFlavourState extends State<WidgetItemFlavour> {
  String _selectedFlavour = '';

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      crossAxisAlignment: CrossAxisAlignment.start,
      // WAY 1
      /* children: flavourList
          .map((data) => RadioListTile(
                dense: true,
                activeColor: greenColor,
                contentPadding: EdgeInsets.zero,
                title: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Text(
                      "${data.flavourName}",
                      style: TextStyle(color: black2, fontSize: 15),
                    ),
                    Text(
                      "${data.flavourPrice}",
                      style: TextStyle(color: black2, fontSize: 15),
                    ),
                  ],
                ),
                groupValue: _selectedFlavour,
                value: data.flavourId,
                onChanged: (val) {
                  setState(() {
                    print('Val: ' + val.toString());
                    _selectedFlavour = val;
                  });
                },
              ))
          .toList(), */
      //WAY 2 
      children: widget.item.items
          .map((data) => InkWell(
                onTap: () {
                  setState(() {
                    //var index = widget.item.items.indexOf(data);
                    //print('Ketan Index: ' + index.toString());
                    widget.item.selectedOption = data.optionItemGuid;
                    _selectedFlavour = data.optionItemGuid;
                  });
                },
                child: Row(
                  children: [
                    Radio(
                      activeColor: greenColor,
                      fillColor: MaterialStateProperty.all<Color>(greenColor),
                      visualDensity:
                          VisualDensity(horizontal: -4, vertical: -3),
                      materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                      value:
                          _selectedFlavour.trim() == data.optionItemGuid.trim()
                              ? true
                              : false,
                      groupValue: true,
                      onChanged: (value) {},
                    ),
                    SizedBox(width: 10),
                    Expanded(
                      child: Text(
                        "${data.optionItemName}",
                        style: TextStyle(color: black2, fontSize: 14),
                      ),
                    ),
                    Text(
                      "$currency_sign${data.price}",
                      style: TextStyle(color: black2, fontSize: 14),
                    ),
                  ],
                ),
              ))
          .toList(),
    );
  }
}
class选项项{
字符串productOptionCategGuid;
字符串类别名称;
字符串minSelectionRequired;
字符串maxSelectionLimit;
String selectedOption;//用于存储所选选项
清单项目;
选项项目({
此.productOptionCategGuid,
这个.categoryName,
这是必需的,
此.maxSelectionLimit,
这个。选择选项,
这个项目,,
});
OptionsItem.fromJson(映射json){
this.productoptioncateguid=json[“productoptioncateguid”].toString();
this.categoryName=json[“categoryName”].toString();
this.minSelectionRequired=json[“minSelectionRequired”].toString();
this.maxSelectionLimit=json[“maxSelectionLimit”].toString();
this.selectedOption=json[“selectedOption”].toString();
this.items=json[“items”]==null
? []
:(json[“Items”]作为列表).map((e)=>Items.fromJson(e)).toList();
}
映射到JSON(){
最终地图数据=新地图();
数据[“ProductOptionCategUID”]=this.ProductOptionCategUID;
数据[“CategoryName”]=this.CategoryName;
数据[“MinSelectionRequired”]=this.MinSelectionRequired;
数据[“MaxSelectionLimit”]=this.MaxSelectionLimit;
数据[“selectedOption”]=此.selectedOption;
如果(this.items!=null)
data[“Items”]=this.Items.map((e)=>e.toJson()).toList();
返回数据;
}
}
项目。省道

class OptionsItem {
  String productOptionCategGuid;
  String categoryName;
  String minSelectionRequired;
  String maxSelectionLimit;
  String selectedOption; //To store selected options
  List<Items> items;

  OptionsItem({
    this.productOptionCategGuid,
    this.categoryName,
    this.minSelectionRequired,
    this.maxSelectionLimit,
    this.selectedOption,
    this.items,
  });

  OptionsItem.fromJson(Map<String, dynamic> json) {
    this.productOptionCategGuid = json["ProductOptionCategGUID"].toString();
    this.categoryName = json["CategoryName"].toString();
    this.minSelectionRequired = json["MinSelectionRequired"].toString();
    this.maxSelectionLimit = json["MaxSelectionLimit"].toString();
    this.selectedOption = json["selectedOption"].toString();
    this.items = json["Items"] == null
        ? []
        : (json["Items"] as List).map((e) => Items.fromJson(e)).toList();
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data["ProductOptionCategGUID"] = this.productOptionCategGuid;
    data["CategoryName"] = this.categoryName;
    data["MinSelectionRequired"] = this.minSelectionRequired;
    data["MaxSelectionLimit"] = this.maxSelectionLimit;
    data["selectedOption"] = this.selectedOption;
    if (this.items != null)
      data["Items"] = this.items.map((e) => e.toJson()).toList();
    return data;
  }
}
class Items {
  String optionItemGuid;
  String optionItemName;
  String price;

  Items({this.optionItemGuid, this.optionItemName, this.price});

  Items.fromJson(Map<String, dynamic> json) {
    this.optionItemGuid = json["OptionItemGuid"].toString();
    this.optionItemName = json["OptionItemName"].toString();
    this.price = json["Price"].toString();
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data["OptionItemGuid"] = this.optionItemGuid;
    data["OptionItemName"] = this.optionItemName;
    data["Price"] = this.price;
    return data;
  }
}
class WidgetItemFlavour extends StatefulWidget {
  final OptionsItem item;
  WidgetItemFlavour({this.item});

  @override
  _WidgetItemFlavourState createState() => _WidgetItemFlavourState();
}

class _WidgetItemFlavourState extends State<WidgetItemFlavour> {
  String _selectedFlavour = '';

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      crossAxisAlignment: CrossAxisAlignment.start,
      // WAY 1
      /* children: flavourList
          .map((data) => RadioListTile(
                dense: true,
                activeColor: greenColor,
                contentPadding: EdgeInsets.zero,
                title: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Text(
                      "${data.flavourName}",
                      style: TextStyle(color: black2, fontSize: 15),
                    ),
                    Text(
                      "${data.flavourPrice}",
                      style: TextStyle(color: black2, fontSize: 15),
                    ),
                  ],
                ),
                groupValue: _selectedFlavour,
                value: data.flavourId,
                onChanged: (val) {
                  setState(() {
                    print('Val: ' + val.toString());
                    _selectedFlavour = val;
                  });
                },
              ))
          .toList(), */
      //WAY 2 
      children: widget.item.items
          .map((data) => InkWell(
                onTap: () {
                  setState(() {
                    //var index = widget.item.items.indexOf(data);
                    //print('Ketan Index: ' + index.toString());
                    widget.item.selectedOption = data.optionItemGuid;
                    _selectedFlavour = data.optionItemGuid;
                  });
                },
                child: Row(
                  children: [
                    Radio(
                      activeColor: greenColor,
                      fillColor: MaterialStateProperty.all<Color>(greenColor),
                      visualDensity:
                          VisualDensity(horizontal: -4, vertical: -3),
                      materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                      value:
                          _selectedFlavour.trim() == data.optionItemGuid.trim()
                              ? true
                              : false,
                      groupValue: true,
                      onChanged: (value) {},
                    ),
                    SizedBox(width: 10),
                    Expanded(
                      child: Text(
                        "${data.optionItemName}",
                        style: TextStyle(color: black2, fontSize: 14),
                      ),
                    ),
                    Text(
                      "$currency_sign${data.price}",
                      style: TextStyle(color: black2, fontSize: 14),
                    ),
                  ],
                ),
              ))
          .toList(),
    );
  }
}
类项目{
字符串optionItemGuid;
字符串选项名;
串价;
项目({this.optionItemGuid,this.optionItemName,this.price});
Items.fromJson(映射json){
this.optionItemGuid=json[“optionItemGuid”].toString();
this.optionItemName=json[“optionItemName”].toString();
this.price=json[“price”].toString();
}
映射到JSON(){
最终地图数据=新地图();
数据[“OptionItemGuid”]=this.OptionItemGuid;
数据[“OptionItemName”]=this.OptionItemName;
数据[“价格”]=此价格;
返回数据;
}
}
widget\u item\u flavor.dart

class OptionsItem {
  String productOptionCategGuid;
  String categoryName;
  String minSelectionRequired;
  String maxSelectionLimit;
  String selectedOption; //To store selected options
  List<Items> items;

  OptionsItem({
    this.productOptionCategGuid,
    this.categoryName,
    this.minSelectionRequired,
    this.maxSelectionLimit,
    this.selectedOption,
    this.items,
  });

  OptionsItem.fromJson(Map<String, dynamic> json) {
    this.productOptionCategGuid = json["ProductOptionCategGUID"].toString();
    this.categoryName = json["CategoryName"].toString();
    this.minSelectionRequired = json["MinSelectionRequired"].toString();
    this.maxSelectionLimit = json["MaxSelectionLimit"].toString();
    this.selectedOption = json["selectedOption"].toString();
    this.items = json["Items"] == null
        ? []
        : (json["Items"] as List).map((e) => Items.fromJson(e)).toList();
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data["ProductOptionCategGUID"] = this.productOptionCategGuid;
    data["CategoryName"] = this.categoryName;
    data["MinSelectionRequired"] = this.minSelectionRequired;
    data["MaxSelectionLimit"] = this.maxSelectionLimit;
    data["selectedOption"] = this.selectedOption;
    if (this.items != null)
      data["Items"] = this.items.map((e) => e.toJson()).toList();
    return data;
  }
}
class Items {
  String optionItemGuid;
  String optionItemName;
  String price;

  Items({this.optionItemGuid, this.optionItemName, this.price});

  Items.fromJson(Map<String, dynamic> json) {
    this.optionItemGuid = json["OptionItemGuid"].toString();
    this.optionItemName = json["OptionItemName"].toString();
    this.price = json["Price"].toString();
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data["OptionItemGuid"] = this.optionItemGuid;
    data["OptionItemName"] = this.optionItemName;
    data["Price"] = this.price;
    return data;
  }
}
class WidgetItemFlavour extends StatefulWidget {
  final OptionsItem item;
  WidgetItemFlavour({this.item});

  @override
  _WidgetItemFlavourState createState() => _WidgetItemFlavourState();
}

class _WidgetItemFlavourState extends State<WidgetItemFlavour> {
  String _selectedFlavour = '';

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisSize: MainAxisSize.min,
      crossAxisAlignment: CrossAxisAlignment.start,
      // WAY 1
      /* children: flavourList
          .map((data) => RadioListTile(
                dense: true,
                activeColor: greenColor,
                contentPadding: EdgeInsets.zero,
                title: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Text(
                      "${data.flavourName}",
                      style: TextStyle(color: black2, fontSize: 15),
                    ),
                    Text(
                      "${data.flavourPrice}",
                      style: TextStyle(color: black2, fontSize: 15),
                    ),
                  ],
                ),
                groupValue: _selectedFlavour,
                value: data.flavourId,
                onChanged: (val) {
                  setState(() {
                    print('Val: ' + val.toString());
                    _selectedFlavour = val;
                  });
                },
              ))
          .toList(), */
      //WAY 2 
      children: widget.item.items
          .map((data) => InkWell(
                onTap: () {
                  setState(() {
                    //var index = widget.item.items.indexOf(data);
                    //print('Ketan Index: ' + index.toString());
                    widget.item.selectedOption = data.optionItemGuid;
                    _selectedFlavour = data.optionItemGuid;
                  });
                },
                child: Row(
                  children: [
                    Radio(
                      activeColor: greenColor,
                      fillColor: MaterialStateProperty.all<Color>(greenColor),
                      visualDensity:
                          VisualDensity(horizontal: -4, vertical: -3),
                      materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                      value:
                          _selectedFlavour.trim() == data.optionItemGuid.trim()
                              ? true
                              : false,
                      groupValue: true,
                      onChanged: (value) {},
                    ),
                    SizedBox(width: 10),
                    Expanded(
                      child: Text(
                        "${data.optionItemName}",
                        style: TextStyle(color: black2, fontSize: 14),
                      ),
                    ),
                    Text(
                      "$currency_sign${data.price}",
                      style: TextStyle(color: black2, fontSize: 14),
                    ),
                  ],
                ),
              ))
          .toList(),
    );
  }
}
类WidgetItemFlavor扩展StatefulWidget{
最终选择项目;
WidgetItemFlavor({this.item});
@凌驾
_WidgetItemFlavourState createState()=>\u WidgetItemFlavourState();
}
类_WidgetItemFlavourState扩展状态{
字符串_selectedflavor='';
@凌驾
小部件构建(构建上下文){
返回列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.start,
//方式1
/*儿童:风味主义者
.map((数据)=>Radioistratile(
是的,
活动颜色:绿色,
contentPadding:EdgeInsets.zero,
标题:世界其他地区(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
正文(
“${data.flavourName}”,
样式:TextStyle(颜色:黑色2,字体大小:15),
),
正文(
“${data.flavourPrice}”,
样式:TextStyle(颜色:黑色2,字体大小:15),
),
],
),
组值:\ u selectedflavor,
值:data.flavourId,
一旦更改:(val){
设置状态(){
打印('Val:'+Val.toString());
_selectedflavor=val;
});
},
))
.toList()*/
//方式2
子项:widget.item.items
.map((数据)=>墨水池(
onTap:(){
设置状态(){
//var index=widget.item.items.indexOf(数据);
//打印('Ketan索引:'+Index.toString());
widget.item.selectedOption=data.optionItemGuid;
_SelectedFlavor=data.optionItemGuid;
});
},
孩子:排(
儿童:[
无线电(
行为