我有一个Choice小部件列表,想将选定的选项传递给另一个小部件。 这是选择小部件的列表
class ChoiceChipWidget extends StatefulWidget {
final List<String> reportList;
final Function(String item) onChoiceSelected;
ChoiceChipWidget(this.reportList, this.onChoiceSelected);
@override
_ChoiceChipWidgetState createState() => new _ChoiceChipWidgetState();
}
class _ChoiceChipWidgetState extends State<ChoiceChipWidget> {
String selectedChoice = "";
_buildChoiceList() {
List<Widget> choices = List();
widget.reportList.forEach((item) {
choices.add(Container(
child: ChoiceChip(
label: Text(item),
selected: selectedChoice == item,
onSelected: (selected) {
setState(() {
selectedChoice = item;
widget.onChoiceSelected(item);
print(selectedChoice); //DATA THAT NEEDS TO BE PASSED
});
},
),
));
});
return choices;
}
@override
Widget build(BuildContext context) {
return Wrap(
children: _buildChoiceList(),
);
}
}
我需要将其传递给此小部件
class AddCashPage extends StatefulWidget {
@override
_AddCashPageState createState() => _AddCashPageState();
}
class _AddCashPageState extends State<AddCashPage> {
void createTodo() async {
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
String repetition = //DATA NEEDS TO GO HERE;
final addCash = AddCash(repetition);
setState(() {
id = addCash.id;
});
}
}
@override
Widget build(BuildContext context) {
return Container(
child: Form(
key: _formKey,
child: Column(
children: <Widget>[
Row(
children: <Widget>[
ChoiceChipWidget(chipList, (item) {
selectedItem = item;
}),
],
),
RaisedButton(
child: Text("Update Cash Flow"),
onPressed: createTodo,
),
],
),
),
);
}
}
我尝试在AddCashPage
中创建一个构造函数
像这样
class AddCashPage extends StatefulWidget {
final ChoiceChipWidget choiceChipWidget;
AddCashPage({Key key, @required this.choiceChipWidget}) : super(key: key);
@override
_AddCashPageState createState() => _AddCashPageState();
}
答案 0 :(得分:4)
我认为您只是想念这里的setState():
ChoiceChipWidget(chipList, (item) {
selectedItem = item;
}),
赞:
ChoiceChipWidget(chipList, (item) {
setState(() => selectedItem = item);
}),
然后您可以执行以下操作:
AddCash(selectedItem)
请确保在selectedItem
中声明_AddCashPageState
变量,但在您的代码中看不到它。
答案 1 :(得分:2)
您选择的窗口小部件通过您创建的构造函数将数据传递到AddCashPage,但是您丢失了一些东西。您需要将AddCashPage具有的数据传递到其状态(_AddCashState),以便在那里使用它。基本上,您需要再创建一个构造函数。
class AddCashPage extends StatefulWidget {
final ChoiceChipWidget choiceChipWidget;
AddCashPage({Key key, @required this.choiceChipWidget}) : super(key: key);
@override
_AddCashPageState createState() => _AddCashPageState(choiceChipWidget: choiceChipWidget);
}
并在_AddCashPageState中:
class _AddCashPageState extends State<AddCashPage> {
final choiceChipWidget;
_AddCashPageState({Key key, @required this.choiceChipWidget});
}
答案 2 :(得分:2)
要在 _AddCashPageState 类中使用传递的数据,可以使用相关Stateful类的相应状态的小部件属性。
对于Ex:要在班级中使用选择筹码小部件,您可以像 widget.ChoiceChipWidget
一样使用它。AddCashPage 类中提供的任何属性/方法都可以使用 widget.ChoiceChipWidget <>在其状态类 _AddCashPageState()中进行访问。 / strong>属性;
您只能在方法中使用此 widget 属性,例如 initState(), build(), dispose()< / strong>等。