flutter - SharedPreference 返回空抖动

标签 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 始终为 null。

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

有人可以帮我解决这个问题吗???

最佳答案

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

所以

    return singleObject ?? null;

将在之前执行

getSelectedVehicleID()

你需要的是

int _selectedVehicleId = await getSelectedVehicleID();

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

希望对您有所帮助:)

关于flutter - SharedPreference 返回空抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55350176/

相关文章:

ios - 设置 firebase_messaging 后,在 Iphone 上安装会卡住

android - flutter 1.9 : D/skia ( 5106): Shader compilation error

flutter - 如果来自 AlertDialog,pushReplacementNamed 不会替换它,只是将其推到顶部

Flutter:有没有办法显示多项目符号列表?

java - 如何修复错误 : JAVA_HOME is set to an invalid directory (Flutter android licenses)

dart - 如何在 EventChannel.listen 的回调 onEvent 中显示 SnackBar

google-maps - 用于获取当前位置的地理定位器插件

Flutter - 容器宽度和高度适合父级

ios - 更新 Xcode 12.5 和 ios 14.5 时出现抖动问题

unit-testing - 当点击的小部件启动计时器时,如何运行单元测试?