I'm starting to learn Getx in flutter, and using navigation.
I want to set unknownRoute, in case that there is a typo etc in the namedroute, so the app should go to a default page.
I do like this:
return GetMaterialApp(
title: 'Named navigation',
unknownRoute: GetPage(name: '/notfound', page: () => UnknownRoutePage()),
initialRoute: '/', // this defines with route will be opened first
getPages: [
GetPage(name: '/', page: () => MyNavigationNamed()),
GetPage(name: '/second', page: () => SecondScreenNamed()),
GetPage(name: '/third', page: () => ThirdParametersScreenNamed()),
GetPage(
name: '/third_with_built_param/:someValue',
page: () => ThirdParametersScreenNamed()),
],
I have the widget:
class UnknownRoutePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(child: Text('UNKNOWN ROUTE')));
}
}
However, then when I try to test it by making a mistake in the route name, like this:
ElevatedButton(
onPressed: () {
Get.toNamed(
'/s'); //THIS IS A DUMMY INCORRECT NAME TO TESTING
},
child: Text('Error in route name, goes to defalt set above.'),
),
I expect my UnknownRoutePage() to open.
However I get this message:
The following assertion was thrown building Directionality(textDirection: ltr):
'package:flutter/src/widgets/framework.dart': Failed assertion: line 5033 pos 14: '_dependents.isEmpty': is not true.
Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.md
The relevant error-causing widget was:
Directionality file:///Users/reuvenberman/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/get-4.3.8/lib/get_navigation/src/root/get_material_app.dart:217:12
When the exception was thrown, this was the stack:
#2 InheritedElement.debugDeactivated.<anonymous closure> (package:flutter/src/widgets/framework.dart:5033:14)
#3 InheritedElement.debugDeactivated (package:flutter/src/widgets/framework.dart:5035:6)
#4 _InactiveElements._deactivateRecursively.<anonymous closure> (package:flutter/src/widgets/framework.dart:1869:15)
#5 _InactiveElements._deactivateRecursively (package:flutter/src/widgets/framework.dart:1871:6)
#6 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:4628:14)
...
====================================================================================================
======== Exception caught by widgets library =======================================================
The following assertion was thrown while finalizing the widget tree:
Duplicate GlobalKey detected in widget tree.
The following GlobalKey was specified multiple times in the widget tree. This will lead to parts of the widget tree being truncated unexpectedly, because the second time a key is seen, the previous instance is moved to the new location. The key was:
- [LabeledGlobalKey<NavigatorState>#56deb Key Created by default]
This was determined by noticing that after the widget with the above global key was moved out of its previous parent, that previous parent never updated during this frame, meaning that it either did not update at all or updated before the widget was moved, in either case implying that it still thinks that it should have a child with that global key.
The specific parent that did not update after having one or more children forcibly removed due to GlobalKey reparenting is:
- Directionality(textDirection: ltr)
A GlobalKey can only be specified on one widget at a time in the widget tree.
When the exception was thrown, this was the stack:
#0 BuildOwner.finalizeTree.<anonymous closure> (package:flutter/src/widgets/framework.dart:2900:15)
#1 BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:2925:8)
#2 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:877:19)
#3 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:328:5)
#4 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
...
Why isn't this working?
Thanks