Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 我有一个关于在initstate中使用异步函数的问题_Flutter_Dart - Fatal编程技术网

Flutter 我有一个关于在initstate中使用异步函数的问题

Flutter 我有一个关于在initstate中使用异步函数的问题,flutter,dart,Flutter,Dart,我想通过调用在initstate中实现的init函数来初始化'LikesList',并相应地呈现相关的小部件。然而,当它实际执行时,LikesList无法初始化,而且奇怪的是,一旦执行热重载,LikesList就会初始化。当我第一次按需要运行LikesList时,如何使其正常初始化 List<String> LikesList = []; int ListIndex = 0; Future<List<String>> init() async {

我想通过调用在initstate中实现的init函数来初始化'LikesList',并相应地呈现相关的小部件。然而,当它实际执行时,LikesList无法初始化,而且奇怪的是,一旦执行热重载,LikesList就会初始化。当我第一次按需要运行LikesList时,如何使其正常初始化

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}”);
}
其他的
返回文本(“加载”);
}
);
}