3

I'm watching a simple authentication provider created using Riverpod in a Flutter app, that will then use NavigatorSate to either navigate to the home page, or the sign in page, depending on whether the user is authenticated. I've create a simple provider that returns 'false' by default, and my App class looks as follows:

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'package:workbench/app_pods.dart';
import 'package:workbench/app_router.dart';
import 'package:workbench/app_routes.dart';

class App extends StatelessWidget {
  App({Key? key}) : super(key: key);

  final _navigatorKey = GlobalKey<NavigatorState>();

  NavigatorState get _navigator => _navigatorKey.currentState!;

  @override
  Widget build(BuildContext context) {
    return Consumer(
      builder: (context, ref, child) {

        final authenticated = ref.watch(authProvider);

        return MaterialApp(
            navigatorKey: _navigatorKey,
            debugShowCheckedModeBanner: false,
            initialRoute: AppRoutes.splash,
            onGenerateRoute: AppRouter.generateRoute,
            theme: ThemeData(
              colorSchemeSeed: const Color(0xFF243EA5),
            ),
            builder: (context, child) {
              if (authenticated) {
                //_navigatorKey.currentState?.pushNamedAndRemoveUntil<void>(
                _navigator.pushNamedAndRemoveUntil<void>(
                  AppRoutes.home,
                      (route) => false,
                );
              } else {
                // _navigatorKey.currentState?.pushNamedAndRemoveUntil<void>(
                _navigator.pushNamedAndRemoveUntil<void>(
                  AppRoutes.signin,
                      (route) => false,
                );
              }
              return Container(child: child);
            }
        );
      }
    );
  }
}

However, _navigatorKey.currentState is always null, and so I'm unable to navigate.

This may not be a Riverpod question, as much as a NavigatorState question - although I'd be super grateful for any tips or suggestions. I was able to get this working with Bloc and a BlocListener but I am trying to convert this 'test' app to Riverpod as a learning exercise.

Blue Waters
  • 725
  • 1
  • 4
  • 17

0 Answers0