0

Error: The following message was thrown: Could not navigate to the initial route. The requested route name was: "/brands" There was no corresponding route in the app, and therefore the initial route specified will be ignored and "/" will be used instead.

I am pretty new to navigator 2.0. So, can't able to correct the problem when route of any of the routes

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:impactoverse_admin_panel/provider/brand_provider.dart';
import 'package:impactoverse_admin_panel/provider/user_provider.dart';
import 'package:impactoverse_admin_panel/screens/brand_screen.dart';
import 'package:impactoverse_admin_panel/screens/dashboard/dashboard_screen.dart';
import 'package:impactoverse_admin_panel/screens/login/login_screen.dart';
import 'package:impactoverse_admin_panel/screens/npos_cause_screen.dart';
import 'package:provider/provider.dart';
// import 'package:flutter_dotenv/flutter_dotenv.dart';\

final GlobalKey<NavigatorState> _rootNavigatorKey =
    GlobalKey<NavigatorState>(debugLabel: 'root');
// final GlobalKey<NavigatorState> _shellNavigatorKey =
//     GlobalKey<NavigatorState>(debugLabel: 'shell');

void main() async {
  // await dotenv.load(fileName: "lib/.env");
  runApp(const MyApp());
}

final GoRouter _router = GoRouter(
  redirect: (context, state) {
    print('Redirect one running --------');
    var userLoggedIn = 
    Provider.of<UserProvider>(
      context,
    ).isLoggedInUserGetter;
    final isLogging = state.location == LoginScreen.routeName;
    print("This is the Path of Location ${state.location}");

    if (!userLoggedIn && !isLogging) {
      return LoginScreen.routeName;
    }
    if (userLoggedIn && isLogging) return DashboardScreen.routeName;
    // if (state.location == BrandScreen.routeName) return BrandScreen.routeName;
    return null;

    //Shared Prefs and Login Check will be here.
  },
  // refreshListenable: UserProvider(),
  navigatorKey: _rootNavigatorKey,
  routes: <RouteBase>[
    GoRoute(
      name: 'Login',
      path: LoginScreen.routeName,
      pageBuilder: (context, state) {
        return MaterialPage(key: state.pageKey, child: const LoginScreen());
      },
      routes: const [],
    ),
    GoRoute(
      name: 'Dashboard',
      path: DashboardScreen.routeName,
      pageBuilder: (context, state) {
        return MaterialPage(key: state.pageKey, child: const DashboardScreen());
      },
      routes: const [],
    ),
    GoRoute(
      name: 'Brands',
      path: BrandScreen.routeName,
      pageBuilder: (context, state) {
        return MaterialPage(key: state.pageKey, child: const BrandScreen());
      },
      routes: const [],
    ),
    GoRoute(
      name: 'Npos&Cause',
      path: NposCauseScreen.routeName,
      pageBuilder: (context, state) {
        return MaterialPage(key: state.pageKey, child: const NposCauseScreen());
      },
      routes: const [],
    ),
  ],
  errorPageBuilder: (context, state) {
    return MaterialPage(
        key: state.pageKey,
        child: Scaffold(
          body: Center(
            child: Text(state.error.toString()),
          ),
        ));
  },
);

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MainProviderWidget();
  }
}

class MainProviderWidget extends StatelessWidget {
  const MainProviderWidget({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        // ListenableProvider<NavigationController>(
        //     create: (_) => NavigationController()),
        ChangeNotifierProvider(create: (_) => UserProvider()),
        ChangeNotifierProvider(create: (_) => BrandProvider()),
      ],
      child: MaterialApp(
        theme: ThemeData(
          // primarySwatch: Colors.blue,
          // scaffoldBackgroundColor: Constants.purpleDark,
          // canvasColor: Constants.purpleLight  ,
          textTheme: GoogleFonts.poppinsTextTheme(
            Theme.of(context).textTheme,
          ),
        ),
        title: 'Impactoverse admin panel',
        home: const StartApp(),
        builder: EasyLoading.init(),
        debugShowCheckedModeBanner: false,
      ),
    );
  }
}

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

  @override
  State<StartApp> createState() => _StartAppState();
}

class _StartAppState extends State<StartApp> {
  intialfunction() async {
    await Provider.of<UserProvider>(context, listen: false).cacheCheck();
  }

  @override
  void initState() {
    intialfunction();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerConfig: _router,
    );
  }
}
Md. Yeasin Sheikh
  • 54,221
  • 7
  • 29
  • 56
Shahryar Rafique
  • 1,211
  • 15
  • 35

1 Answers1

0

There were two issues in the code.

1- Using two material App one in main

MainProviderWidget

and the second is in

StartApp
as 
MaterialApp.router

2- This is the issue with the package I checked and issue is open and only happens in debug mode. For a workaround, you can run on release mode through the terminal or you can use this GitHub link to follow. https://github.com/flutter/flutter/issues/114597

Shahryar Rafique
  • 1,211
  • 15
  • 35