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.