【问题标题】:How to fix Shared Preferences is returning null string in Flutter?如何修复共享首选项在 Flutter 中返回空字符串?
【发布时间】:2020-12-28 03:25:21
【问题描述】:

我正在使用 共享偏好 来存储和加载 Flutter 中的地图的值,但出现错误

The following assertion was thrown building UserPro(dirty):
A non-null String must be provided to a Text widget.
'package:flutter/src/widgets/text.dart':
Failed assertion: line 360 pos 10: 'data != null'

我当然知道 Shared Preferences 返回一个空字符串值,但我不明白为什么,因为我正在等待该值。以及如何解决它。我附上我的代码和这个问题供您参考

----存储 ------

void setUserValues() async{
    SharedPreferences sharedPrefs = await SharedPreferences.getInstance();
    currentUser.forEach((k,v)=>sharedPrefs.setString(k, v));
  }

这里 currentUser 包含包含“姓名”、“电子邮件”等用户数据的地图。

----加载中 ------

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

SharedPreferences localStorage;


class UserPro extends StatelessWidget{
  final currentUser;

  String name;
  UserPro({this.currentUser}){
    name=localStorage.getString("Name");;
  }
  static Future init() async{
    localStorage = await SharedPreferences.getInstance();
  }
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      body: Center(
        child: Text(
            name,
            style: TextStyle(
              fontSize: 15,
              fontFamily: 'Berlin Sans FB',
              fontWeight: FontWeight.bold,
            ),
          ),
        ),
    );
  }
}

【问题讨论】:

  • 您需要等待共享首选项被初始化。你在哪里调用 init() 方法?

标签: android flutter sharedpreferences


【解决方案1】:

使用 FutureBuilder

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

//SharedPreferences localStorage;


class UserPro extends StatelessWidget{
  final currentUser;

  //String name;
  UserPro({this.currentUser});
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      body: Center(
        child: FutureBuilder<SharedPreferences>(
             future: SharedPreferences.getInstance(),
             builder: (context,snapshot){
                if (!snapshot.hasData) {
                   return CircularProgressIndicator();
                  }
            return Text(
            snapshot.data.getString("name"),
            style: TextStyle(
              fontSize: 15,
              fontFamily: 'Berlin Sans FB',
              fontWeight: FontWeight.bold,
            ),
          ),
      },
   ),
    ),
    );
  }
}

【讨论】:

  • 我需要更多帮助,我收到此错误 [错误:flutter/lib/ui/ui_dart_state.cc(166)] 未处理的异常:MissingPluginException(未找到通道插件上 getAll 方法的实现。 flutter.io/shared_preferences)我运行了颤振清洁器,发布获取并清除了模拟器数据并再次运行它,但再次遇到相同的错误
  • 对我来说,卸载模拟器上的应用程序并重新构建项目可以解决这个问题。经常在第一次使用插件时发生
  • 我确实再次擦除了模拟器数据,清理了构建树并冷启动了模拟器,但仍然遇到同样的错误,尝试将共享首选项从 0.5.10 降级到 0.5.9,但仍然得到同样的错误
  • 在 SharedPreferences github repo 上提出问题会更有帮助
猜你喜欢
  • 2021-06-24
  • 2019-09-09
  • 1970-01-01
  • 2018-10-02
  • 2020-07-21
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
相关资源
最近更新 更多