flutter - setState 仅在我再次调用该操作后才重建页面
问题描述
我想从另一个页面(类)添加一个项目,它有点像我看到项目出现,在我再次按下按钮之后,就在第二个页面再次加载之前。这很奇怪,它看起来只有当我再次按下按钮时才会设置状态。如果我在 _WorkoutListState 类中添加项目,它会起作用。
class WorkoutList extends StatefulWidget {
WorkoutList({Key? key}) : super(key: key);
@override
_WorkoutListState createState() => _WorkoutListState();
}
class _WorkoutListState extends State<WorkoutList> {
List<Workout> workouts = List<Workout>.empty(growable: true);
@override
void initState() {
super.initState();
workouts.add(Workout(name: 'up'));
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(children: <Widget>[
Text('Workouts'),
Expanded(
child: ListView.builder(
itemCount: workouts.length,
itemBuilder: (context, index) {
return WorkoutListItem(
excercise: workouts[index],
);
}),
),
]),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => (AddWorkout(
workout: (workout) => workouts.add(workout),
))));
setState(() {});
},
tooltip: 'Add',
child: Icon(Icons.add),
),
));
}
}
和另一页
class AddWorkout extends StatefulWidget {
final Function(Workout) workout;
AddWorkout({Key? key, required this.workout}) : super(key: key);
@override
_AddWorkoutState createState() => _AddWorkoutState();
}
class _AddWorkoutState extends State<AddWorkout> {
void _addWorkout() {
widget.workout(Workout(name: 'down'));
Navigator.pop(context);
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Column(
children: [Text('adadad')],
),
floatingActionButton: FloatingActionButton(
onPressed: _addWorkout,
),
));
}
}
解决方案
我使用 Navigator 的返回值功能修复了它
这是第一个 onPressed
onPressed: () async {
Workout workout = await Navigator.push(
context, MaterialPageRoute(builder: (context) => (AddWorkout())));
workouts.add(workout);
setState(() {});
},
第二个
onPressed: () => Navigator.pop(context, Workout(name: 'down')),
推荐阅读
- ruby - 从 Twitter 搜索 API 中排除多词关键字
- android - 无法在firebase动态链接的REST api中的请求正文中传递ofl参数?
- python - matplotlib secondary_xaxis() 函数不起作用
- javascript - 开玩笑,匹配正则表达式
- http - 如何在没有端口范围和 index.html 的情况下访问网页
- mesh-network - 在 batman-adv 网状网络中配置多个网关
- http - Сopas。在请求中传递标头并选择请求方法
- flutter - 注册或登录时 Flutter onAuthStateChanged 流未更新子项
- python - 如何正确地将 Mnist 数据集(idx 格式)解析为 python 数组?
- matlab - 在 Matlab 中打印字符串的问题