Как реализовать простую логику перенаправления после отправки кнопки из пользовательской нижней панели навигации на основе CupertintoTabScaffold

флаттер нуб здесь.

Я следовал руководству по созданию нижней панели навигации. Теперь все, что я хочу, это иметь перенаправление на страницу подтверждения после того, как пользователь отправит новую поездку, которая будет создана в моем приложении. Проблема в том, что когда я перестраиваю страницу после отправки кнопки, вкладка на нижней панели навигации не меняется. Я считаю, что здесь есть очень простое решение, однако я до сих пор не смог его понять.

Вот пользовательский эшафот: `

      class CupertinoHomeScaffold extends StatelessWidget {
  const CupertinoHomeScaffold({
    Key? key,
    required this.currentTab,
    required this.onSelectedTab,
    required this.widgetBuilders,
  }) : super(key: key);

  final TabItem currentTab;
  final ValueChanged<TabItem> onSelectedTab;
  final Map<TabItem, WidgetBuilder> widgetBuilders;

  @override
  Widget build(BuildContext context) {
    return CupertinoTabScaffold(
  
        tabBar: CupertinoTabBar(
          items: [
            _buildItem(TabItem.home),
            _buildItem(TabItem.search),
            _buildItem(TabItem.addtrip),
            _buildItem(TabItem.mytrips),
            _buildItem(TabItem.profile),
          ],
          onTap: (index) => onSelectedTab(TabItem.values[index]),
        ),
        tabBuilder: (context, index) {
          final item = TabItem.values[index];
          return CupertinoTabView(
            builder: (context) => widgetBuilders[item]!(context),
          );
        });
  }

  BottomNavigationBarItem _buildItem(TabItem tabItem) {
    final itemData = TabItemData.allTabs[tabItem];
    final color = currentTab == tabItem ? const Color(0xFF4DD8E7) : Colors.grey;
    return BottomNavigationBarItem(
      icon: Icon(itemData!.icon, color: color),
      label: itemData.title,
    );
  }
}


`

А вот страница, которая создает выбранную страницу TabItem:

`

      class Home extends StatefulWidget {
  const Home({super.key});

  @override
  State<Home> createState() => _HomeState();
}

class _HomeState extends State<Home> {
  TabItem _currentTab = TabItem.home;
  


  Map<TabItem, WidgetBuilder> get widgetBuilders {
    return {
      TabItem.home: (_) => TripsHome(),
      TabItem.search: (_) => const SearchPage(),
      TabItem.addtrip: (_) => AddTrip2(),
      TabItem.mytrips: (_) => const MyTrips(),
      TabItem.profile: (_) => const ProfileData(),
    };
  }

  void _select(TabItem tabItem) {
    setState(() => _currentTab = tabItem);
  }

  @override
  Widget build(BuildContext context) {
    return CupertinoHomeScaffold(
      currentTab: _currentTab,
      onSelectedTab: _select,
      widgetBuilders: widgetBuilders,
    );
  }
}

`

Я хочу, чтобы после отправки был выбран TabItem.mytrips, и тогда пользователь сможет увидеть поездку, которую он опубликовал. Я попытался установить состояние после отправки, но мне не хватает чего-то, чтобы фактически изменить selectedTab в CupertinoHomeScaffold.

0 ответов

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