我正在设计一个应用程序,以对用户进行时事调查。我希望根据用户是否参加调查显示特定的图标。
此刻,我有一个将来会从Firestore中提取当前调查的名称,然后查看集合_ entrants中是否存在文档。如果用户进行了调查,则调查将存储在一个文档中,该文档的名称由Firebase_auth提供。
[如果是,则该应用应显示一个勾号图标,因为用户已进行了调查。如果他们还没有参加调查,则该文档将不存在,并且用户将看到“新建”图标,以显示有新调查。
我已经使用以下代码来获取有关用户是否参加了调查的信息:
Future<void> takenSurvey2() async {
final sn = await Firestore.instance
.collection('Controller')
.document('Current Survey')
.get();
surveyName = sn['cs'];
//The above gives me the name of the current survey
final snapShot = await Firestore.instance
.collection('$surveyName' + '_entrants')
.document(userid)
.get();
if (snapShot.exists) {
takenSurvey = true;
} else {
takenSurvey = false;
}
setState(() {});
}
然后这是图标显示的位置:
Positioned(
right: 30,
top: 20,
child: FutureBuilder(
future: takenSurvey2(),
builder: (context, snapshot) {
if (takenSurvey == false) {
return Icon(
Foundation.burst_new,
size: 48,
color: Color(0xff303841),
);
} else if (takenSurvey == true) {
return Icon(
Foundation.check,
size: 48,
color: Color(0xff303841),
);
} else
return Container();
})),
目前,这很好。 **但是,当我添加AdMob广告时,由于setState(() {})
中的takenSurvey2
似乎正在不断重建应用,因此我没有看到加载广告的机会,而我只是看到一个闪烁的方框。
我如何从Cloud Firestore获取有关用户是否参加了调查以及值是否发生变化(即他们进行了调查,或者我更改了当前调查)的更新,所以页面被重建或图标发生了变化,比我目前使用setstate
不断重建页面的设置。
[谢谢-抱歉,如果不清楚-我是编码新手。
如果要在不重建支架的情况下重新加载窗口小部件树中的特定窗口小部件,那么我建议将ChangeNotifierProvider与仅在要在提供者更新时应用于要重新加载的窗口小部件的使用者一起使用
参考:https://medium.com/flutterpub/provider-state-management-in-flutter-d453e73537c5