【问题标题】:Flutter Getx improper use of a GetX has been detectedFlutter Getx 检测到 GetX 使用不当
【发布时间】:2022-08-04 21:56:28
【问题描述】:

我有这样的简单 Getx 控制器

class UserController extends GetxController {
  var user = UserModel();


  void addUser(UserModel data) {
    user = data;
    update();
  }
}

我正在像这样在 userModel 中添加数据

   usercontroller.addUser(UserModel(
        userAge: value[\'userAge\'],
        userEmail: value[\'userEmail\'],
        userID: value[\'userID\'],
        userImage: value[\'userImage\'],
        userName: value[\'userName\'],
        userPassion: value[\'passion\']));
    globalUserId = value[\'userID\'];
    // print(usercontroller.user.userName.value);

添加数据后,我可以打印它及其工作。

但是现在我需要在不同的页面上显示,我通过 GetX 显示,它显示错误[Get] the improper use of a GetX has been detected. 我不知道是什么导致了问题,但是当我在此之后在用户中添加数据时,我可以通过打印检查它添加成功,但 Getx 导致此问题。

Container(
          width: double.infinity,
          child: GetX<UserController>(
            builder: (_) => SingleChildScrollView(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  Text(
                    \'${user_controller.user.userName}\',
                    style: TextStyle(color: Colors.black, fontSize: 25),
                  ),
                  SizedBox(
                    height: size.height * 0.04,
                  ),
                ],
              ),
            ),
          ),
        )

    标签: flutter dart flutter-getx


    【解决方案1】:

    您没有在代码中使用正确的 getx。要在 getx 中管理状态并读取实时更改数据,您需要使用 obs 定义对象。查看下面的代码

    class UserController extends GetxController {
     var user = UserModel().obs;
    
    
      void addUser(UserModel data) {
        user.value = data;
        update();
      }
    }
    

    并在您的小部件中放置 obx 用于观察值

    Container(
          width: double.infinity,
          child: Obx(
                () => SingleChildScrollView(
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  Text(
                    '${user_controller.user.value.userName}',
                    style: TextStyle(color: Colors.black, fontSize:25),
                  ),
                  SizedBox(
                    height: 100,
                  ),
                ],
              ),
            ),
          ),
        )
    

    【讨论】:

      【解决方案2】:

      GetX 未正确使用

      像这样创建控制器后

          class UserController extends GetxController {
            var user = UserModel();
      
      
            void addUser(UserModel data) {
              user = data;
              update();
            }
          }
      

      将 SingleChildScrollView 包装在 GetBuilder 中

          Container(
            width: double.infinity,
            child: GetBuilder<UserController>(
              builder: (ctrl) => SingleChildScrollView(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: [
                    Text(
                      '${ctrl.user.userName}',
                      style: TextStyle(color: Colors.black, fontSize: 25),
                    ),
                    SizedBox(
                      height: size.height * 0.04,
                    ),
                  ],
                ),
              ),
            ),
          )
      

      【讨论】:

        猜你喜欢
        • 2021-10-07
        • 2021-12-14
        • 2022-01-02
        • 1970-01-01
        • 2021-05-28
        • 2021-03-29
        • 2022-01-08
        • 2021-10-10
        • 2021-04-16
        相关资源
        最近更新 更多