getx控制器使用一次后返回null

如何解决getx控制器使用一次后返回null

我正在开发一个应用程序(类似于用于计算的测验应用程序)。对于每个屏幕,我都有一个控制器,其中一个屏幕是结果屏幕。在第一次尝试中一切正常,但是,在第二次尝试中,当我完成测验时,结果屏幕返回 null 并说“在 null 值上使用了 null 检查运算符。

这是抛出的异常


════════ Exception caught by widgets library ═══════════════════════════════════
The following _CastError was thrown building _BodyBuilder:
Null check operator used on a null value

The relevant error-causing widget was
Scaffold
lib/…/view/result_screen.dart:27
When the exception was thrown,this was the stack
#0      GetBuilderState.initState
package:get/…/simple/get_state.dart:134
#1      StatefulElement._firstBuild
package:flutter/…/widgets/framework.dart:4770
#2      ComponentElement.mount
package:flutter/…/widgets/framework.dart:4605
...     Normal element mounting (19 frames)
#21     Element.inflateWidget
package:flutter/…/widgets/framework.dart:3662
#22     MultiChildRenderObjectElement.inflateWidget
package:flutter/…/widgets/framework.dart:6285
#23     MultiChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:6296
...     Normal element mounting (111 frames)
#134    Element.inflateWidget
package:flutter/…/widgets/framework.dart:3662
#135    MultiChildRenderObjectElement.inflateWidget
package:flutter/…/widgets/framework.dart:6285
#136    MultiChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:6296
...     Normal element mounting (9 frames)
#145    Element.inflateWidget
package:flutter/…/widgets/framework.dart:3662
#146    MultiChildRenderObjectElement.inflateWidget
package:flutter/…/widgets/framework.dart:6285
#147    MultiChildRenderObjectElement.mount
package:flutter/…/widgets/framework.dart:6296
...     Normal element mounting (170 frames)
#317    Element.inflateWidget
package:flutter/…/widgets/framework.dart:3662
#318    MultiChildRenderObjectElement.inflateWidget
package:flutter/…/widgets/framework.dart:6285
#319    Element.updateChild
package:flutter/…/widgets/framework.dart:3414
#320    RenderObjectElement.updateChildren
package:flutter/…/widgets/framework.dart:5717
#321    MultiChildRenderObjectElement.update
package:flutter/…/widgets/framework.dart:6308
#322    Element.updateChild
package:flutter/…/widgets/framework.dart:3401
#323    ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4657
#324    StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:4805
#325    Element.rebuild
package:flutter/…/widgets/framework.dart:4322
#326    StatefulElement.update
package:flutter/…/widgets/framework.dart:4837
#327    Element.updateChild
package:flutter/…/widgets/framework.dart:3401
#328    ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4657
#329    Element.rebuild
package:flutter/…/widgets/framework.dart:4322
#330    ProxyElement.update
package:flutter/…/widgets/framework.dart:4985
#331    Element.updateChild
package:flutter/…/widgets/framework.dart:3401
#332    ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4657
#333    Element.rebuild
package:flutter/…/widgets/framework.dart:4322
#334    ProxyElement.update
package:flutter/…/widgets/framework.dart:4985
#335    _InheritedNotifierElement.update
package:flutter/…/widgets/inherited_notifier.dart:181
#336    Element.updateChild
package:flutter/…/widgets/framework.dart:3401
#337    SingleChildRenderObjectElement.update
package:flutter/…/widgets/framework.dart:6154
#338    Element.updateChild
package:flutter/…/widgets/framework.dart:3401
#339    ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4657
#340    StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:4805
#341    Element.rebuild
package:flutter/…/widgets/framework.dart:4322
#342    StatefulElement.update
package:flutter/…/widgets/framework.dart:4837
#343    Element.updateChild
package:flutter/…/widgets/framework.dart:3401
#344    SingleChildRenderObjectElement.update
package:flutter/…/widgets/framework.dart:6154
#345    Element.updateChild
package:flutter/…/widgets/framework.dart:3401
#346    SingleChildRenderObjectElement.update
package:flutter/…/widgets/framework.dart:6154
#347    Element.updateChild
package:flutter/…/widgets/framework.dart:3401
#348    ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4657
#349    Element.rebuild
package:flutter/…/widgets/framework.dart:4322
#350    ProxyElement.update
package:flutter/…/widgets/framework.dart:4985
#351    Element.updateChild
package:flutter/…/widgets/framework.dart:3401
#352    ComponentElement.performRebuild
package:flutter/…/widgets/framework.dart:4657
#353    StatefulElement.performRebuild
package:flutter/…/widgets/framework.dart:4805
#354    Element.rebuild
package:flutter/…/widgets/framework.dart:4322
#355    BuildOwner.buildScope
package:flutter/…/widgets/framework.dart:2619
#356    WidgetsBinding.drawFrame
package:flutter/…/widgets/binding.dart:878
#357    RendererBinding._han
#358    SchedulerBinding._invokeFrameCallback
package:flutter/…/scheduler/binding.dart:1143
#359    SchedulerBinding.handleDrawFrame
package:flutter/…/scheduler/binding.dart:1080
#360    SchedulerBinding._handleDrawFrame
package:flutter/…/scheduler/binding.dart:996
#364    _invoke (dart:ui/hooks.dart:163:10)
#365    PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:259:5)
#366    _drawFrame (dart:ui/hooks.dart:126:31)
(elided 3 frames from dart:async)

当我单击错误堆栈中的 ( lib/.../view/result_screen.dart:27 ) 时,它会将我带到屏幕的脚手架。我不确定为什么会这样。

我有一个 HomeWrapper 屏幕,其中包含一些小部件和一个页面视图


void initControllers() {
    Get.put(HomeScreenController());
    Get.put(FirstPageController());
    Get.put(SecondPageController());
    Get.put(ThirdPageController());
    Get.put(FourthPageController());
    Get.put(FifthPageController());
    Get.put(SixthPageController());
    Get.put(SeventhPageController());
    Get.put(EighthPageController());
    Get.put(ResultsController());
  }

  @override
  Widget build(BuildContext context) {
    initControllers();
  return Column(...);

}

在第八页,有一个按钮,执行一个方法来计算结果并导航到结果屏幕

class FinishButton extends StatelessWidget {
  final bool _isValid = Get.find<FirstPageController>().validLandArea;
  @override
  Widget build(BuildContext context) {
    return GetBuilder<ResultsController>(
      builder: (controller) => Padding(
        padding: const EdgeInsets.only(bottom: 20.0),child: CupertinoButton(
          child: Text('Finish'),onPressed: () {
            if (_isValid) {
              controller.clickFinishButton();
              Navigator.pushReplacementNamed(context,ResultScreen.id);
            } else {
              HomeScreenController.to.goToLandArea();
            }
          },color: AppColors.primaryColor,),);
  }
}

在结果页面中,有一个按钮可以让我返回 Root,它将根据用户值(无论他是否登录)返回 HomeWrapper 或 Authetication

CupertinoButton(
                        child: Text('Back to Home'),onPressed: () {
                          Navigator.pushReplacementNamed(context,Root.id);
                        },

当我回到 HomeWrapper 时,所有页面都可以使用它们的控制器正常工作,除非我导航回结果屏幕。

我试图让控制器永久和懒惰地放置,但没有奏效。如果有人可以告诉我问题是什么。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-