Как реализовать простую логику перенаправления после отправки кнопки из пользовательской нижней панели навигации на основе 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.