【问题标题】:Shared Preferences on iOSiOS 上的共享首选项
【发布时间】:2020-02-26 16:15:46
【问题描述】:

我正在尝试使用 Shared Preferences,但我遇到了这种奇怪的行为。

我正在使用:

shared_preferences: ^0.5.6+2

initState 上的 StateFull 小部件 上,我有这个:

@override
  void initState() {
    super.initState();
    _testing()
  }


Future<void> _testing() async{
 print("starting")
 SharedPreferences prefs = await SharedPreferences.getInstance();
 await prefs.setInt('value', 1);
 print("saved?")
}

当我使用 flutter run 运行代码时,我只得到“开始”的打印,而不是“保存?”的打印。

我用于该项目的完全相同的代码用于构建 Android 应用程序,并且运行良好。但是对于 iOS 是行不通的。

我错过了什么?

【问题讨论】:

  • 你不是必须标记_testing函数async吗? (你还应该给它一个返回类型,例如Future&lt;void&gt;)我很惊讶它甚至可以编译。
  • 你好@RichardHeap,是的,它有异步,编辑了更正的问题。我已经为函数添加了 Future,但仍然只打印“开始”消息

标签: ios flutter sharedpreferences


【解决方案1】:

它有效,没有错误。复制并粘贴并重试:

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return MyAppState();
  }
}

class MyAppState extends State<MyApp> {

  saveValue() async{
    print("Starting...");
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setInt('value', 1);
    print("Saved?");
  }


  @override
  void initState() {
    super.initState();
    saveValue();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("Shared Preferences")),
      ),
    );
  }
}

【讨论】:

    【解决方案2】:

    它不会打印,因为您在设置 int 值之前使用了 await。

    await prefs.setInt('value', 1);
    

    如果您删除 await ,然后尝试检查打印值,它将正常工作。

    让我知道它是否有效。

    【讨论】:

      猜你喜欢
      • 2018-10-03
      • 2013-10-12
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多