SharedPreference 返回空颤动

Posted

技术标签:

【中文标题】SharedPreference 返回空颤动【英文标题】:SharedPreference returning null flutter 【发布时间】: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); 【参考方案1】:

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

所以

    return singleObject ?? null;

将在之前执行

getSelectedVehicleID()

你需要的是

int _selectedVehicleId = await getSelectedVehicleID();

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

希望这会有所帮助:)

【讨论】:

以上是关于SharedPreference 返回空颤动的主要内容,如果未能解决你的问题,请参考以下文章

数据未在 dio 中正确发送,颤动

如何在颤动中从其他页面的块流中获取数据

空异常颤动时调用了方法“[]”

如何在颤动中处理文件的空安全性?

TypeError:无法读取空颤动的属性“uid”

页面更改时颤动中消失的数据