是否可以使用从for循环创建的无线电列表瓦片来从flutter中的构造函数中输出和选择数据



这是我制作的构造函数

class User {
String strength1;
String strength2;
String strength3;
String strength4;
String strength5;
User({this.strength1, this.strength2, this.strength3,this.strength4,this.strength5});
Map<String, dynamic>toMap(){
var map = <String, dynamic>{
'strength1' : strength1,
'strength2' : strength2,
'strength3' : strength3,
'strength4' : strength4,
'strength5' : strength5,
};
return map;
}
User.fromMap(Map <String, dynamic>map){
strength1 = map['strength1'];
strength2 = map['strength2'];
strength3 = map['strength3'];
strength4 = map['strength4'];
strength5 = map['strength5'];
}
}

然后循环应该是

List<Widget> createRadioListUsers() {
List<Widget>widgets = [];
for (User user in users) {
widgets.add(
RadioListTile(
value: user,
groupValue: selectedUser,
title: Text(user.strengths),
onChanged: (currentUser) {
print('Current User ${currentUser.strengths}');
setSelectedUser(currentUser);
},
selected: selectedUser == user,
activeColor: Colors.green,

);
}
return widgets;
}

我从一个教程中学习了这个循环,并尝试更改构造函数的类型,但显然单选按钮的值不起作用,因为在教程中已经给出了值,但对于我正在制作的程序,我必须将用户输入从另一个页面获取到此页面,并在单选列表平铺中显示它们

以下是使用StreamBuilder的解决方案:

首先,让我们声明控制器、流和getter

final BehaviorSubject<User> _radioController = BehaviorSubject<User>();
Stream<User> get radioStream => _radioController.stream;
Function(User) get updateRadio => _radioController.sink.add;

然后,将生成器放入您的小部件

StreamBuilder(
stream: radioStream,
initialData: null,
builder: (BuildContext context, AsyncSnapshot<User> snapshot) {
for (User user in users) {
widgets.add(
RadioListTile(
value: user,
groupValue: snapshot.data, // The value will be updated when you select an other radio
title: Text(user.strengths),
onChanged: updateRadio, // Update the groupValue
selected: selectedUser == user,
activeColor: Colors.green,

);
},
// Return your widgets, for example Column(children: widgets),
},
),
...

最新更新