我有一个模型为了回答这个问题我把它简化了
MyModel(a:0, b:0, c:0) //a b c are integers
现在我需要从这个模型生成按钮,所以我创建了一个新的类,它将这个模型作为一个参数并生成按钮
class Panel extends StatelessWidget {
final MyModel model;
const Panel({this.model});
List<Widget> _buildContent() {
final list = [
{'a': model.a},
{'b': model.b},
{'c': model.c}
];
List<Widget> l = [];
list.forEach((element) {
l.add(FlatButton(child: Text(element.keys.first), onPressed: () {}));
});
return l;
}
@override
Widget build(BuildContext context) {
return Container(
height: 70,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: _buildContent(),
));
}
}
在我的主类中我这样调用它
Panel(model: myModel);
我试图找到最简洁的方法来处理这些按钮的按下,每个按钮应该在每次按下时更新其元素+1,并将更新后的模型发送回主类
2条答案
按热度按时间ddrv8njm1#
您需要Panel在模型更改时提供回调函数,然后您就可以更改应用中使用的模型。请注意添加到Panel的“onChange”回调函数,该函数在应用中调用
setState
来实际更改模型。示例:
wmomyfyw2#
您可以执行以下操作:
1.您可以创建一个
Global Variable
,它包含一个dictionary/hasmap
,而不是遵循模型。现在,您可以在任何文件的任何位置访问全局值,只需导入
globals.dart
文件(如import '{path}/globals.dart'
1.现在在您的
Panel
中,我们可以访问它,并按照您的意愿进行项目的增量1.最后一步,现在当你点击按钮,你会得到更新的HasMap,它是全局可访问的,所以你可以调用
Panel()
,不需要参数,当你想检查更新的值时,只需要打印它这是我能为你考虑的最干净的方式。