I am working on an application (something like a quiz app to do some calculations). For each screen I have a controller and one of these screens is the result screen. Everything works fine in the first attempt, however, in the second attempt, when I finish the quiz, The results screen returns null and says that "null check operator used on a null value.
this is the thrown exception
════════ 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)
when I clicked on ( lib/…/view/result_screen.dart:27 ) in the error stack it took me to the scaffold of the screen. I am not sure why this is happening.
I have a HomeWrapper screen that consists of some widgets and a page view
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(...);
}
in the eighth page, there is a button that executes a method to caluculate the result and navigate to the results screen
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,
),
),
);
}
}
in the results page, there is a button to take me back to the Root that will return either HomeWrapper or Authetication based on user value (whether he's logged in or not)
CupertinoButton(
child: Text('Back to Home'),
onPressed: () {
Navigator.pushReplacementNamed(context, Root.id);
},
color: AppColors.primaryColor,
),
when I get back to HomeWrapper all pages are working fine with their controllers except when I navigate back to the result screen.
I tried to make the controller permenant and lazy put but did not work. If someone please can tell me what the problem is.