无法在 Getx Flutter 中获取布尔值

Posted

技术标签:

【中文标题】无法在 Getx Flutter 中获取布尔值【英文标题】:Unable to get bool value in Getx Flutter 【发布时间】:2021-10-23 08:00:31 【问题描述】:

我正在尝试开发登录检查器。以下代码应在用户登录时重定向到 HomeScreen,而在用户未登录时重定向到 LoginPage。但是即使它已经登录,它也只会重定向到 LoginScreen() 而不是 HomeScreen()。

用户模型:

class User 
User(
    required this.id,
    required this.name,
    required this.email,
    required this.cart,
);

String id;
String name;
String email;
List cart;

用户控制器:

class UserController extends GetxController 
  RxString id = ''.obs;
  RxBool isLoggedIn = false.obs;
  RxString name = ''.obs;
  RxString email = ''.obs;
  RxString image = ''.obs;
  RxList cart = [].obs;
  final NetworkHandler _handler = NetworkHandler();

  @override
  void onInit() 
    super.onInit();
    getUserDetails();
  

  getUserDetails() 
    User _user = _handler.userDetails();
    id.value = _user.id;
    if (id.value != '') 
      isLoggedIn.value = true;
    
    name.value = _user.name;
  

检查屏幕

class StateCheck extends StatelessWidget 
  var controller = Get.put(UserController());

  StateCheck(Key? key) : super(key: key);

  @override
  Widget build(BuildContext context) 
    SizeConfig().init(context);
    return Obx(
      () => controller.isLoggedIn.value
          ? const HomeScreen()
          : const LoginScreen(),
    );
  

【问题讨论】:

【参考方案1】:

首先你必须在SharedPreferences中设置登录值。

登录成功时

SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool("isLogin", true);

退出

SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool("isLogin", false);

您可以检查登录状态 ||在初始屏幕中检查这一点以获得最佳实践(在 init 方法中)

if(prefs.getBool('isLogin')==null||prefs.getBool('isLogin')==false)
 // login screen
else
  // home screen

【讨论】:

以上是关于无法在 Getx Flutter 中获取布尔值的主要内容,如果未能解决你的问题,请参考以下文章

Flutter ToDo 列表复选框无法分配布尔值

无法使用 spring boot 和 postgresql 获取布尔值以进行插入

如何使用 SharedPreferences 从 Flutter 中的列表中保存多个布尔值

布尔值的 Flutter Unknown 键:EnableTransactions

Flutter - cubit - 改变cubit内的布尔值

在 Flutter 中,我如何使用 API 和 GetX 在 JSON 中获取数据