如何解决只有在重新启动应用程序后才会加载未来构建器中的数据
我从提供程序的列表中获取数据。当应用程序打开从 SharedPreferences 添加到那里的数据时,或者如果它是第一次打开,第一个数据来自服务器,然后保存到 Shared 首选项,无论如何它都会从那里添加到此列表中。 问题是数据只有在应用重启后才会出现在屏幕上,而在第一次启动时不会出现。
Future<void> fetchAndSet() async {
pref = await SharedPreferences.getInstance();
pref.containsKey('users') == true ? getPreferences() : setPreferences();
return _users;
}
setPreferences() async {
ApiManager()
.fetch()
.then((value) => pref.setString('users',value))
.then((value) => getPreferences());
}
Future getPreferences() async {
var jsonMap = json.decode(pref.getString('users'));
var isThere = false;
for (var el in jsonMap) {
var newEl = User.fromJson(el);
for (var user in _users) {
if (user.id == newEl.id) {
isThere = true;
}
}
if (!isThere) {
_users.add(newEl);
}
}
}
body: FutureBuilder(
future:
Provider.of<UsersData>(this.context,listen: true).fetchAndSet(),builder: (context,snapshot) => snapshot.connectionState !=
ConnectionState.done
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: Provider.of<UsersData>(this.context,listen: true)
.users
.length,itemBuilder: (context,index) {
return GestureDetector(
onTap: () => Navigator.of(context).push(MaterialPageRoute(
builder: (context) => DetailsScreen(
Provider.of<UsersData>(this.context,listen: true)
.users[index]
.id))),child: Container(
解决方法
您是否测试过将这段代码中的 listen
更改为 false
?我认为它应该是 false
而不是 true
,然后更改这一行:
Provider.of<UsersData>(this.context,listen: true).fetchAndSet(),
到
Provider.of<UsersData>(this.context,listen: false).fetchAndSet(),
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。