我正在使用IndexedStack小部件并根据一些逻辑提供小部件列表。我有一个显示学生列表的列表页面和另一个用于添加新学生的页面。
当我添加新的学生时,它会成功添加并存储在firestore中。但是,当我切换回学生名单页面时,它不会显示新添加的学生。它显示除最后一个创建的之外的所有其他学生。如果我关闭应用程序并重新打开,则会显示包括添加的所有学生在内的所有学生。
我放置了一些日志并发现,小部件构建函数在应用程序加载的第一次调用时被调用。下一次小部件从缓存中加载,因为构建函数没有被调用。
我需要每次手动重新加载学生列表小部件吗?是否有一种方法可以做到这一点?或者还有其他方法告诉IndexedStack小部件每次重新加载小部件。如何在不重新启动应用程序的情况下获取新添加的学生名单呢?
IndexedStack代码:
当我添加新的学生时,它会成功添加并存储在firestore中。但是,当我切换回学生名单页面时,它不会显示新添加的学生。它显示除最后一个创建的之外的所有其他学生。如果我关闭应用程序并重新打开,则会显示包括添加的所有学生在内的所有学生。
我放置了一些日志并发现,小部件构建函数在应用程序加载的第一次调用时被调用。下一次小部件从缓存中加载,因为构建函数没有被调用。
我需要每次手动重新加载学生列表小部件吗?是否有一种方法可以做到这一点?或者还有其他方法告诉IndexedStack小部件每次重新加载小部件。如何在不重新启动应用程序的情况下获取新添加的学生名单呢?
IndexedStack代码:
body: Center(
child: IndexedStack(
index: _selectedPage,
children: this._widgets,
),
)
学生列表页面代码:
@override
Widget build(BuildContext context) {
Logger _logger = Logger(this.runtimeType.toString());
_logger.fine('Loading pupils listing page.');
return StreamBuilder<QuerySnapshot>(
stream: _querySnapshot,
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.data == null)
return FrequentWidgets().getProgressBar();
if (snapshot.hasError) return Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return Text('Loading...');
default:
return ListView(
children: snapshot.data.documents.map(
(DocumentSnapshot document) {
return ListTile(
trailing: Icon(Icons.person),
title: Text(document["nam"]),
onTap: () {
appData.pupilId = document.documentID;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => HomePage(
sectionType:
SectionType.InstructorActivityForPupil,
userType: UserType.Instructor,
contextInfo: {
DataSharingKeys.PupilIdKey:
document.documentID
},
),
),
);
},
);
},
).toList(),
);
}
},
);
}