SharedPreference返回空抖动

时间:2019-03-26 05:05:23

标签: flutter

我想通过“共享首选项”呈现某些内容。

这是我的代码:

return FutureBuilder<ChildModel>(
      future: sharedPreference.getData(),
      builder: (context, snapshot) {
        print("SNAPSHOT" + snapshot.data.toString());
        if (snapshot.hasData &&
            snapshot.data != null) {
          return _render(snapshot,context);
        } else if (snapshot.hasError) {
          return Text("${snapshot.error}");
        } else {
          return Text('Select Vehicle');
        }
      },
    );

我的共享首选项:

Future<ChildModel> getData() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();

    ChildModel singleObject ;
    List<ChildModel> userVehicleList = [];

    getSelectedVehicleID().then((onValue){
      if(onValue!=null){
        if (prefs.get(_kUserVehicles) != null) {
          final List parsedList = json.decode(prefs.get(_kUserVehicles));
          userVehicleList =  parsedList.map<ChildModel>((val) =>  ChildModel.fromJson(val)).toList();
        }


        for (int i = 0; i < userVehicleList.length; i++) {
          if (userVehicleList[i].id == onValue) {
            singleObject = userVehicleList[i];
          }
        }
      }
    });

    return singleObject ?? null;
  }

问题是singleObject = userVehicleList[i]已执行但没有返回任何内容。

在Future Builder中,snapshot.data始终为空。

我想返回在该循环中找到的那个singleObject。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

返回值之前,您不必等待将来完成。

所以

    return singleObject ?? null;

将在

之前执行
getSelectedVehicleID()

您需要的是

int _selectedVehicleId = await getSelectedVehicleID();

然后继续从共享的首选项中获取任何内容并将其返回。

希望会有所帮助:)