Я создаю функцию с использованием rest api для get
пользовательских данных с использованием его ID.
мой код в пользовательском интерфейсе:
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),
),
);
},
);
}
И у меня есть проблема с тем фактом, что каждый раз, когда я go перехожу на страницу, где выполняется мой запрос, функция перезагружается и информация снова извлекается с сервера.
Как заставить эти данные загружаться из моего остатка API только один раз, а затем отображается плавно без необходимости делать еще один запрос к базе данных для этих данных.
Я знаю, что я должен использовать управление состоянием, но я не знаю, как это сделать.
Спасибо за любой ответ:)