addInventoryPage
実際、私はフォーム ウィジェットを含むページを作成しましたが
formkey(GlobalKey<FormState>())
、同じページを別のルート
(routes1:/inventory,routes2:/openingInventory)
で使用し、いくつかの追加パラメータを使用するというビジネス要件があります。
しかし、ルートから/inventory
ルートに切り替えると、 /openingInventory
fromKey を null として取得しました
これが addInventoryPage のコードです
class StateCommonPage extends StatelessWidget {
InventoryTabController _inventoryTabController = Get.find();
VariationController _variationController = Get.find();
CommonWidget _commonWidget = CommonWidget();
ValidationMethods _validationMethods = ValidationMethods();
final description = TextEditingController();
final quantity = TextEditingController();
GlobalKey<FormState> formKey=GlobalKey<FormState>(debugLabel: 'STATE COMMON');
final States titleText;
double width;
double height;
StateCommonPage({this.titleText});
@override
Widget build(BuildContext context) {
width = Get.width * 0.95;
height = Get.height;
return Scaffold(
body: Center(
child: Container(
height: height * 0.6,
child: Form(
key:formKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Text(
'Fill Details of ${titleText.toString().split('.').last.capitalizeFirst} '
'Process',
style: Theme.of(context).textTheme.headline2,
),
..........
ルート切り替え用Get.offNamed('inventory');
ここに私のcustomDrawerがあります
class CustomDrawer extends StatelessWidget {
Widget buildMenuListTile(BuildContext context, Menus menu) {
return Obx(
() => menu.menuCode == 'INVENTORY'
? custom.ExpansionTile(
initiallyExpanded: true,
children: buildSubMenuTile(context, menu.menuCode),
leading: Icon(
Finals.menuIconMap[menu.menuCode],
size: 24,
color: Theme.of(context).primaryColor,
),
title: Text(
menu.menuName,
style: menu.menuCode == selectedMenuId.value
? Theme.of(context).textTheme.headline4
: Theme.of(context).textTheme.headline3,
),
)
: ListTile(
selectedTileColor: Theme.of(context).accentColor.withOpacity(0.3),
leading: Icon(
Finals.menuIconMap[menu.menuCode],
size: 24,
color: Theme.of(context).primaryColor,
),
selected: menu.menuCode == selectedMenuId.value,
hoverColor: Theme.of(context).primaryColor,
title: Text(
menu.menuName,
style: menu.menuCode == selectedMenuId.value
? Theme.of(context).textTheme.headline4
: Theme.of(context).textTheme.headline3,
),
onTap: () {
Get.offNamed(menu.relativePath);
}),
);
}
}
これが私のルートです
class Routes {
static const INVENTORY = '/inventory';
static const OPENING_INVENTORY = '/openingInventory';
Map<String, WidgetBuilder> test;
static final routes = [
GetPage(
name: INVENTORY,
page: () => InventoryBottomTabBar(),
binding: BindingsBuilder.put(() => InventoryTabController()),
),
GetPage(
name: OPENING_INVENTORY,
page: () => InventoryBottomTabBar(),
binding:
BindingsBuilder.put(() => InventoryTabController()),
)
}
デバッグログ
ウィジェット ツリーのファイナライズ中に次のアサーションがスローされました: ウィジェット ツリーで重複した GlobalKey が検出されました。
次の GlobalKey がウィジェット ツリーで複数回指定されました。これにより、ウィジェット ツリーの一部が予期せず切り捨てられます。これは、キーが 2 回目に表示されると、前のインスタンスが新しい場所に移動されるためです。キーは次のとおりです。
- [LabeledGlobalKey#0db7f] これは、上記のグローバル キーを持つウィジェットが以前の親から移動された後、このフレーム中に以前の親が更新されなかったこと、つまりウィジェットがまったく更新されなかったか、ウィジェットの前に更新されなかったことを認識することによって決定されました。どちらの場合も、そのグローバル キーを持つ子を持つ必要があるとまだ考えていることを意味します。GlobalKey の再ペアレント化により 1 つ以上の子が強制的に削除された後、更新されなかった特定の親は次のとおりです。
- ConstrainedBox(BoxConstraints(0.0<=w<=Infinity, h=484.4), renderObject: RenderConstrainedBox#37684 relayoutBoundary=up2) GlobalKey は、ウィジェット ツリーで一度に 1 つのウィジェットにのみ指定できます。例外がスローされたとき、これはスタックでした: #0 BuildOwner.finalizeTree. (パッケージ:flutter/src/widgets/framework.dart:2900:15) #1 BuildOwner.finalizeTree (パッケージ:flutter/src/widgets/framework.dart:2925:8) #2 WidgetsBinding.drawFrame (パッケージ:flutter/src /widgets/binding.dart:877:19) #3 RendererBinding._handlePersistentFrameCallback (パッケージ:flutter/src/rendering/binding.dart:328:5) #4 SchedulerBinding._invokeFrameCallback (パッケージ:flutter/src/scheduler/binding.dart) :1144:15)