gpt4 book ai didi

rest - 程序运行时仅运行一次功能

转载 作者:行者123 更新时间:2023-12-03 04:23:12 25 4
gpt4 key购买 nike

我通过使用rest api和他的ID对用户数据get创建函数。

我在UI中的代码:

  SharedPreferences sharedPreferences;
UserApiService userApiService;

@override
void initState() {
super.initState();
getUserData();
userApiService = UserApiService();
}

Future<User> getUserData() async {
sharedPreferences = await SharedPreferences.getInstance();
int id = sharedPreferences.getInt('id');
return userApiService.getUser(id);
}

我在api_service中的代码:
  Future<User> getUser(int id) async{
final response = await client.get('$baseUrl/user/$id');
if(response.statusCode == 200){
return userFromJson(response.body);
}else return null;
}

这是我的 FutureBuilder:
  @override
Widget build(BuildContext context){
return FutureBuilder(
future: getUserData(),
builder: (context, snapshot){
if(!snapshot.hasData){
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
iconTheme: IconThemeData(color: Colors.black),
title: Text('Profil', style: TextStyle(color: Colors.black, letterSpacing: 1),),
elevation: 0.0,
centerTitle: true,
actions: <Widget>[
IconButton(
icon: Icon(Icons.more_vert),
onPressed: () {
//
},
)
],
bottom: PreferredSize(child: Container(color: Colors.black, height: 0.1), preferredSize: Size.fromHeight(0.1),),
),
body: Center(
child: CircularProgressIndicator(),
),
);
}
User user = snapshot.data;
return Scaffold(
backgroundColor: Colors.white,
body: Container(
child: Text(user.firstName),
),
);
},
);
}


我的问题是,每次我进入完成请求的页面时,都会重新加载该函数,并再次从服务器检索信息。

如何仅从我的rest api下载一次此数据,然后使其平滑显示,而无需再次向数据库请求该数据。

我知道我必须使用状态管理,但是我不知道该怎么做。

感谢您的回答:)

最佳答案

https://github.com/flutter/flutter/issues/11426#issuecomment-414047398
原因:

每次发出重新构建时,都会调用FutureBuilder状态的didUpdateWidget。此函数检查旧的将来对象是否不同于新的将来对象,如果存在,则重新启动FutureBuilder。

解:
因此,您不必:

FutureBuilder(
future: getUserData(),
....

我们本应该:
Future _future;

@override
initState() {
super.initState();
_future = getUserData();
}

然后
FutureBuilder(
future: _future,

关于rest - 程序运行时仅运行一次功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61339919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com