【问题标题】:SharedPreferences not working on real device FLUTTERSharedPreferences 在真实设备 FLUTTER 上不起作用
【发布时间】:2020-07-03 15:00:11
【问题描述】:

我使用 SharedPreferences 来记住用户名和密码,以便下次登录时无需询问密码。当我使用带有 USB 电缆的真实设备进行调试时,它运行良好。但是当我构建 APK 并安装它时,它在我的设备中不起作用。我不知道我错过了什么。

我这样在登录页面中保存数据`

Future<Null> loginUser(isLogin, name, fac, year, gender) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('Name', name);
prefs.setString('IsLogin', isLogin);
prefs.setString('Faculty', fac);
prefs.setString('Year', year);
prefs.setString('Gender', gender);
prefs.setString('Email', email);

print(prefs.getString('Faculty'));

}

我在主页中使用了这段代码....

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
  Widget build(BuildContext context) {
    return NewMain();
  }
}

class NewMain extends StatefulWidget {
  @override
  _NewMainState createState() => _NewMainState();
}

class _NewMainState extends State<NewMain> {
  var name, fac, year, gender, email;
  var goToLogin = true;
  @override
  void initState() {
    // TODO: implement initState
    checkRem();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    if (goToLogin)
      return MaterialApp(
        home: Login(),
      );
    else
      return MaterialApp(
        home: MainClass(name, fac, year, gender, email),
      );
  }

  void checkRem() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    if (prefs.getString('IsLogin') == 'Yes') {
      goToLogin = false;
      fac = prefs.getString('Faculty');
      name = prefs.getString('Name');
      gender = prefs.getString('Gender');
      year = prefs.getString('Year');
      email = prefs.getString('Email');
    }
  }
}

如果 goToLogin 为 false,它将移动到 MainClass。 它在调试中完美运行。它不适用于构建的 apk 应用程序。

已解决

这是我的 IDE 的问题。更新和修复

【问题讨论】:

    标签: flutter sharedpreferences


    【解决方案1】:

    问题是你调用了checkRem(),它在initState() 中是异步的,所以在checkRem() 完全执行之前调用了构建方法。

    解决方案: 方法执行完毕后用futureBuilder() 包裹或调用setState()

    【讨论】:

      猜你喜欢
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 2012-07-06
      • 1970-01-01
      相关资源
      最近更新 更多