Виджет одной и той же формы для двух разных маршрутов во флаттере

На самом деле я создал страницу, содержащую виджет формы (с именем: addInventoryPage) с ключом формы (GlobalKey()), и это некоторое бизнес-требование для использования одной и той же страницы с разными маршрутами (routes1: / inventory, routes2: / openningInventory) с некоторыми дополнительными params, но когда я переключаюсь с / inventory routes на / OpeningInventory routes, я получил 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 OPENNING_INVENTORY = '/openingInventory';

  Map<String, WidgetBuilder> test;

  static final routes = [
   
    GetPage(
      name: INVENTORY,
      page: () => InventoryBottomTabBar(),
      binding: BindingsBuilder.put(() => InventoryTabController()),
    ),
    GetPage(
      name: OPENNING_INVENTORY,
      page: () => InventoryBottomTabBar(),
      binding:
          BindingsBuilder.put(() => InventoryTabController()),
    )
}

отчет об ошибках

Следующее утверждение было выдано при завершении дерева виджетов: В дереве виджетов обнаружен дубликат GlobalKey.

Следующий GlobalKey был указан несколько раз в дереве виджетов. Это приведет к неожиданному усечению частей дерева виджетов, потому что при втором просмотре ключа предыдущий экземпляр перемещается в новое место. Ключ был:

  • [LabeledGlobalKey#0db7f] Это было определено путем наблюдения за тем, что после того, как виджет с указанным выше глобальным ключом был перемещен из своего предыдущего родительского элемента, этот предыдущий родительский элемент никогда не обновлялся в течение этого кадра, что означает, что он либо не обновлялся вообще, либо обновлялся до виджета. был перемещен, в любом случае подразумевая, что он все еще считает, что у него должен быть дочерний элемент с этим глобальным ключом. Конкретный родительский элемент, который не обновился после принудительного удаления одного или нескольких дочерних элементов из-за повторного родительства GlobalKey:
  • ConstrainedBox(BoxConstraints(0.0<=w<=Infinity, h=484.4), renderObject: RenderConstrainedBox#37684 relayoutBoundary=up2) GlobalKey можно указать только для одного виджета за раз в дереве виджетов. Когда было создано исключение, это был стек:#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)

0 ответов

Другие вопросы по тегам