SharedPreferences 不适用于真实设备 FLUTTER

SharedPreferences not working on real device FLUTTER

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

问题是你调用了 checkRem(),它在 initState() 中是异步的,所以构建方法在 checkRem().

完成执行之前被调用

索恩: 用 futureBuilder() 包装它或在方法

完成执行后调用 setState()