Flutter 我有一个关于在initstate中使用异步函数的问题
我想通过调用在initstate中实现的init函数来初始化'LikesList',并相应地呈现相关的小部件。然而,当它实际执行时,LikesList无法初始化,而且奇怪的是,一旦执行热重载,LikesList就会初始化。当我第一次按需要运行LikesList时,如何使其正常初始化Flutter 我有一个关于在initstate中使用异步函数的问题,flutter,dart,Flutter,Dart,我想通过调用在initstate中实现的init函数来初始化'LikesList',并相应地呈现相关的小部件。然而,当它实际执行时,LikesList无法初始化,而且奇怪的是,一旦执行热重载,LikesList就会初始化。当我第一次按需要运行LikesList时,如何使其正常初始化 List<String> LikesList = []; int ListIndex = 0; Future<List<String>> init() async {
List<String> LikesList = [];
int ListIndex = 0;
Future<List<String>> init() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
LikesList = await prefs.getStringList('LikesList');
ListIndex = await LikesList.length;
print("${LikesList}");
}
@override
void initState() {
// TODO: implement initState
// Future.delayed(Duration(milliseconds: 100)).then((_) {
// init();
// });
Timer.run(() {
init();//This is the function I implemented.
});
super.initState();
print("++++++++${LikesList}");
}
List LikesList=[];
int ListIndex=0;
Future init()异步{
final SharedReferences prefs=等待SharedReferences.getInstance();
LikesList=wait prefs.getStringList('LikesList');
ListIndex=await LikesList.length;
打印(“${LikesList}”);
}
@凌驾
void initState(){
//TODO:实现initState
//Future.delayed(持续时间(毫秒:100))。然后((){
//init();
// });
Timer.run(){
init();//这是我实现的函数。
});
super.initState();
打印(“+LikesList}”);
}
使用Future方法怎么样?
使用Future和Future builder可以使您获得处于初始化状态的数据。正如@whatamelon所建议的,您可以使用FutureBuilder来实现此目的
Future<List<String>> init() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getStringList('LikesList');
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: init(),
builder: (ctx, snapshot) {
if(snapshot.hasData) {
print(snapshot.data);
return Text("${snapshot.data}");
}
else
return Text("loading");
}
);
}
Future init()异步{
final SharedReferences prefs=等待SharedReferences.getInstance();
返回prefs.getStringList('LikesList');
}
@凌驾
小部件构建(构建上下文){
回归未来建设者(
future:init(),
生成器:(ctx,快照){
if(snapshot.hasData){
打印(快照数据);
返回文本(“${snapshot.data}”);
}
其他的
返回文本(“加载”);
}
);
}