我有两个屏幕,第一个从数据库中获取数据并显示在屏幕上。第二个屏幕创建一个新的用户/课程并将其发送到数据库。但当我使用弹出窗口返回到第一个屏幕时,我想更新其数据。我该如何做呢?
从第二个屏幕返回时,如何更新屏幕数据?
第一次筛选:
class CourseList extends StatefulWidget {
const CourseList({super.key});
@override
State<CourseList> createState() => _CourseListState();
}
class _CourseListState extends State<CourseList> {
Future<List<Course>?> listCourses = Future.value([]);
@override
initState() {
super.initState();
Future.delayed(Duration.zero, () {
setState(() {
var course = CoursesData();
listCourses = course.getCourses();
});
});
}
@override
Widget build(BuildContext context) {
var futureBuilder = FutureBuilder(
future: listCourses,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return createScreen(context, snapshot);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
return const Center(child: CircularProgressIndicator());
});
return futureBuilder;
}
Widget createScreen(BuildContext context, AsyncSnapshot snapshot) {
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
Navigator.of(context)
.pushNamed('/courseForm', arguments: null);
},
child: const Text("Adicionar Curso"))
],
),
Expanded(
child: ListView.builder(
shrinkWrap: true,
itemCount: snapshot.data.length,
itemBuilder: ((context, index) {
return CourseTile(snapshot.data[index]);
}),
))
],
);
}
}
第二屏:
IconButton(
onPressed: () {
final isValid = _fomr.currentState!.validate();
Navigator.pop(context, true);
},
icon: const Icon(Icons.save))
2条答案
按热度按时间zrfyljdw1#
您可以导航到第二个屏幕,如下所示:
然后在第二个屏幕上像这样弹出
正如你现在所做的,你传递回一个
bool
变量到第一个屏幕,它就像一个标志,你可以找到什么时候是重新加载数据的时间。也不要忘记await
为导航器,因为你可以从你的第二个屏幕接收数据。现在,当你从第二个屏幕回来,它会更新用户界面。oogrdqng2#
The documentation详细介绍了这个例子,所以我将粘贴相关部分:
关键就在这一行:
navigator.push
的结果将存储在result
中。因此,在您的情况下,您应该在得到结果后执行此操作(因为@eamirho3ein已先回答,所以我在解释):