我正在尝试重用切换按钮的最佳方法。我希望从切换按钮小部件中获取尽可能低的参数,这是将建立切换按钮的字符串列表和用于选择切换按钮的选定字符串。从onPressed in切换按钮中,我想返回选定的字符串,该字符串将更新主类中的选定字符串。如果选择的值为null或与列表不匹配,则在切换列表中选择并更新为第一个字符串。这就是我到目前为止的去处...(对不起...真的很难过)
这是切换按钮小部件
class ReuseToggle extends StatelessWidget {
final List<String> children;
final String selected;
final Function onPressed;
const ReuseToggle({this.selected, this.onPressed, this.children});
@override
Widget build(BuildContext context) {
return ToggleButtons(
children: children.map((text) => Text(text)).toList(),
onPressed: (int index) {
print(index);
},
/// logic from official documentation
// for (int buttonIndex = 0;
// buttonIndex < isSelected.length;
// buttonIndex++) {
// if (buttonIndex == index) {
// isSelected[buttonIndex] = true;
// } else {
// isSelected[buttonIndex] = false;
// }
// }
// },
isSelected: [true, false],
);
}
}
和主要班级
class MaterialScreen extends StatefulWidget {
@override
_MaterialScreenState createState() => _MaterialScreenState();
}
List<String> list = ['value1', 'value2'];
String selectedToggle;
class _MaterialScreenState extends State<MaterialScreen> {
Widget build(BuildContext context) {
return ReuseToggle(
children: list,
selected: selectedToggle,
onPressed: (value) {
setState(() {
selectedToggle = value;
});
},
);
}
}
答案 0 :(得分:1)
这是一种解决方案,但是您必须在主类中初始化 public override void Up()
{
Sql("ALTER TABLE [MyTable] ADD [HasAnyCheck] AS ([Check1] = 1 OR [Check2] = 1)");
}
public override void Down()
{
DropColumn("dbo.MyTable", "HasAnyCheck");
}
。这样,如果selectedToggle
为空,则将不选择切换按钮,并且selectedToggle
会在第一次onPressed时更新。
selectedToggle