SharedPreferences在真实设备上不起作用FLUTTER

时间:2020-03-23 06:05:03

标签: flutter sharedpreferences

我使用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的问题。更新并修复

1 个答案:

答案 0 :(得分:1)

问题是您调用checkRem()中异步的initState(),因此在完全执行checkRem()之前调用build方法。

Soln: 在方法完全执行后用futureBuilder()包裹或调用setState()