getx
getx copied to clipboard
Null check operator used on a null value
Describe the bug When i use Get.back(),it will throw exception,but when i use Phone physical return button ,it's great.
The following _TypeError was thrown during paint(): Null check operator used on a null value
The relevant error-causing widget was:
TabBar TabBar:file:///Users/mac/Documents/jiachao/flutter_jiachao/jc_agg/lib/pages/test_page/test_view.dart:26:11
When the exception was thrown, this was the stack:
#0 _IndicatorPainter.paint (package:flutter/src/material/tabs.dart:532:46)
#1 RenderCustomPaint._paintWithPainter (package:flutter/src/rendering/custom_paint.dart:588:13)
#2 RenderCustomPaint.paint (package:flutter/src/rendering/custom_paint.dart:630:7)
#3 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3208:7)
#4 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#5 RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2882:15)
#6 RenderFlex.paint (package:flutter/src/rendering/flex.dart:1040:7)
#7 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3208:7)
#8 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#9 RenderBoxContainerDefaultsMixin.defaultPaint (package:flutter/src/rendering/box.dart:2882:15)
#10 RenderCustomMultiChildLayoutBox.paint (package:flutter/src/rendering/custom_layout.dart:408:5)
#11 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3208:7)
#12 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#13 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:129:13)
#14 _RenderInkFeatures.paint (package:flutter/src/material/material.dart:662:11)
#15 RenderObject._paintWithContext (package:flutter/src/rendering/object.dart:3208:7)
#16 PaintingContext.paintChild (package:flutter/src/rendering/object.dart:250:13)
#17 RenderProxyBoxMixin.paint (package:flutter/src/rendering/proxy_box.dart:129:13)
#18 RenderPhysicalModel.paint.
Reproduction code NOTE: THIS IS MANDATORY, IF YOUR ISSUE DOES NOT CONTAIN IT, IT WILL BE CLOSED PRELIMINARY)
example:
class TestState {
late TabController controller;
TestState() {
///Initialize variables
}
}
class TestLogic extends GetxController with GetSingleTickerProviderStateMixin {
final TestState state = TestState();
@override
void onInit() {
super.onInit();
state.controller = TabController(length: 2, vsync: this);
}
@override
void onReady() {
super.onReady();
}
@override
void onClose() {
state.controller.dispose();
super.onClose();
}
}
class TestPage extends StatelessWidget {
TestPage({Key? key}) : super(key: key);
final logic = Get.put(TestLogic());
final state = Get.find<TestLogic>().state;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Test"),
actions: [
TextButton(
onPressed: () {
Get.back();
},
child: Text("Go Back"))
],
),
body: Column(
children: [
TabBar(controller: state.controller, tabs: [
Tab(
text: "123",
),
Tab(
text: "456",
)
]),
Expanded(
child: TabBarView(controller: state.controller, children: [
Container(
color: Colors.red,
),
Container(
color: Colors.green,
)
]))
],
),
);
}
}
To Reproduce Steps to reproduce the behavior:
- click the textButton "Go Back" will throw exception.
Flutter Version: Enter the version of the Flutter you are using [✓] Flutter (Channel stable, 3.16.4, on macOS 12.7.2 21G1974 darwin-x64, locale zh-Hans-CN) [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.2) [✓] Xcode - develop for iOS and macOS (Xcode 14.0) [✓] Chrome - develop for the web [✓] Android Studio (version 2023.1) [✓] Connected device (3 available)
Getx Version: get: ^4.6.6
I found the reason for the error.
If i set navigatorObservers,it will throw exception.
GetMaterialApp(
navigatorObservers: [
GetXRouterObserver()
],
)
class GetXRouterObserver extends NavigatorObserver {
@override
void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
RouterReportManager.reportCurrentRoute(route);
}
@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) async {
RouterReportManager.reportRouteDispose(route);
}
}
I found the reason for the error.
If i set navigatorObservers,it will throw exception.
GetMaterialApp( navigatorObservers: [ GetXRouterObserver() ], ) class GetXRouterObserver extends NavigatorObserver { @override void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) { RouterReportManager.reportCurrentRoute(route); } @override void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) async { RouterReportManager.reportRouteDispose(route); } }
有办法在不移除这个observer的情况下解决这个bug吗?
我这边有个问题:我想在路由之前判断用户是否登录,如果没登录我路由就不跳转,但是中间件必须要返回一个RoutSetting,因此我想着监听路由跳转,加了observer,但是碰到跟你一样 的报错。