【问题标题】:late initilization error shared prefrences in flutter?颤振中的后期初始化错误共享首选项?
【发布时间】:2022-01-23 09:18:21
【问题描述】:

即使在我初始化之后也会出现错误:

延迟初始化错误显示名称

这是我设置值的代码:

    var displayName=jsondata["username"];
    SharedPreferences prefs=await SharedPreferences.getInstance();
    prefs.setString('displayName', displayName);

我正在访问数据:

 late String displayName;

  getData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  displayName=prefs.getString('displayName')?? "0";
  }

  initState() {
   getData();
   super.initState();
   }

我不知道是什么问题? 但在其他屏幕上它正在工作。

【问题讨论】:

  • 我认为如果你把空值放在displayName中会更好,所以String displayName = ""
  • 我认为问题在于 getData 完成之前 displayName initState 完成。尝试将默认值添加到 displayName 并删除后期修饰符。此外,添加 .then 并将 state 设置为 displayName。我认为它会起作用。阅读:stackoverflow.com/questions/51901002/…

标签: flutter dart flutter-sharedpreference


【解决方案1】:

希望它有效:)
创建一个类 userpreferences 并初始化共享首选项。

class UserPreferences {
  static SharedPreferences? _preferences;

  static const _keyUsername = 'username';
  static Future init() async => _preferences = await SharedPreferences.getInstance();

  static Future setUsername(String username) async => await _preferences!.setString(_keyUsername, username);
  static String? getUsername() => _preferences!.getString(_keyUsername);
}

然后在你的 main.dart 文件中调用 userPreferences 方法
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await UserPreferences.init();
  runApp(DanikNews());
}

然后从类 userPreferences 调用 displayname
  @override
  void initState() {
    myCategory = UserPreferences.getUsername() ?? "user name is null";
    super.initState();
  }

【讨论】:

    猜你喜欢
    • 2021-09-04
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多