Java 如何在Flatter/Dart(Android)中创建动态无线电组
下面是我用来在简单的android中创建的代码,我必须为颤振/飞镖做些什么,我对颤振/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();
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;
});
},
孩子:排(
儿童:[
无线电(
行为