【问题标题】:SharedPreference returning null flutterSharedPreference 返回空颤动
【发布时间】:2019-08-16 10:11:45
【问题描述】:

我想从 Shared Preferences 中渲染一些东西。

这是我的代码:

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。

谁能帮我解决这个问题???

【问题讨论】:

  • 您要保存到共享首选项的部分在哪里?
  • 我没有保存这个我只是从列表中获取匹配的对象。列表的列表保存和返回工作正常。
  • 可能是您正在尝试检索数据,但它们没有带有密钥的数据。添加 ??像这样试试。最终列表 parsedList = json.decode(prefs.get(_kUserVehicles) ?? 0);

标签: flutter


【解决方案1】:

在返回值之前,您不会等待未来完成。

所以

    return singleObject ?? null;

将在之前执行

getSelectedVehicleID()

你需要的是

int _selectedVehicleId = await getSelectedVehicleID();

然后继续从共享偏好中获取任何内容并返回。

希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2021-07-28
    • 2022-11-02
    • 2021-04-28
    • 2021-12-24
    • 1970-01-01
    • 2021-08-23
    相关资源
    最近更新 更多