Estou construindo este aplicativo para minha aula de projeto final que escaneia códigos QR e depois de escanear os códigos QR ele redireciona para outra página dart que exibe o resultado. Comecei a implementar a barra de navegação inferior e a rota go e segui muitos tutoriais legais. O único problema que estou tendo é que minha barra de navegação inferior tem duas seleções, uma delas é do recurso de escaneamento e a outra é para uma página de ajuda. Depois que o escaneamento é concluído, os resultados são exibidos, mas eu quero poder selecionar o escaneamento na barra de ferramentas inferior para fazer outro escaneamento, mas ele permanece na mesma página de resultados. Acho que estou fazendo algo errado e tentei muito, mas estou preso. Eu agradeceria se alguém pudesse fornecer alguma orientação.
A página inicial, que é uma página inicial, é carregada, então a página de digitalização permite a digitalização do código QR, e a página de plástico é a página que exibe o resultado.
Tentei seguir tutoriais como este.
https://codewithandrea.com/articles/flutter-bottom-navigation-bar-nested-routes-gorouter/
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:recycle/help.dart';
import 'package:recycle/main_p.dart';
import 'package:recycle/main_p_routes.dart';
import 'package:recycle/plastic.dart';
import 'package:recycle/scan.dart';
import 'package:recycle/main_splash_page.dart';
final _rootNavigatorKey = GlobalKey<NavigatorState>();
final router = GoRouter(
navigatorKey: _rootNavigatorKey,
initialLocation: Routes.start,
routes: [
GoRoute(
path: Routes.start,
builder: (BuildContext context, GoRouterState state) {
return const StartPage();
},
),
StatefulShellRoute.indexedStack(
builder:
(context, state, navigationShell) =>
LayoutScaffold(navigationShell: navigationShell),
branches: [
StatefulShellBranch(
routes: [
GoRoute(
path: Routes.scan,
builder: (context, state) => const ScanPage(),
routes: [
GoRoute(
path: Routes.plastic,
builder: (context, state) => const Plastic(),
),
],
),
],
),
StatefulShellBranch(
routes: [
GoRoute(
path: Routes.help,
builder: (context, state) => const Help(),
),
],
),
],
),
],
);
class Routes {
Routes._();
static const String start = '/start'; // start page
static const String scan = '/scan'; //scan page
static const String plastic = 'plastic';
static const String nestedPlastic = '/scan/plastic'; // plastic page
static const String help = '/help';
static const String aluminum = '/aluminum'; // help page
}
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:recycle/main_p_dest.dart';
class LayoutScaffold extends StatelessWidget {
const LayoutScaffold({required this.navigationShell, super.key});
final StatefulNavigationShell navigationShell;
@override
Widget build(BuildContext context) => Scaffold(
body: navigationShell,
bottomNavigationBar: NavigationBar(
selectedIndex: navigationShell.currentIndex,
onDestinationSelected: navigationShell.goBranch,
indicatorColor: Theme.of(context).primaryColor,
destinations:
destinations
.map(
(destination) => NavigationDestination(
icon: Icon(destination.icon),
label: destination.label,
selectedIcon: Icon(destination.icon, color: Colors.white),
),
)
.toList(),
),
);
}
import 'package:flutter/material.dart';
class Destination {
const Destination({required this.label, required this.icon});
final String label;
final IconData icon;
}
const destinations = [
Destination(label: 'Scan', icon: Icons.camera_rear),
Destination(label: 'Help', icon: Icons.help),
];
você pode modificar a
onDestinationSelected
função no LayoutScaffold para verificar se Scan já está selecionado e forçar a navegação: