import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'auth.dart'; import 'firebase_options.dart'; import 'router.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); runApp(const ProviderScope(child: AppWithFirebase())); } class AppWithFirebase extends ConsumerWidget { const AppWithFirebase({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final router = ref.watch(routerProvider); return MaterialApp.router( routeInformationParser: router.routeInformationParser, routerDelegate: router.routerDelegate, routeInformationProvider: router.routeInformationProvider, title: 'flutter_riverpod + go_router Demo', theme: ThemeData( primarySwatch: Colors.blue, ), ); } } class HomePage extends ConsumerWidget { const HomePage({super.key}); static String get routeName => 'home'; static String get routeLocation => '/'; @override Widget build(BuildContext context, WidgetRef ref) { final name = ref.watch(authProvider.select( (value) => value.valueOrNull?.displayName, )); return Scaffold( appBar: AppBar(title: const Text("Your phenomenal app")), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text("Wellcome, $name. This is your homepage."), ElevatedButton( onPressed: () async { await FirebaseAuth.instance.signOut(); }, child: const Text("Logout"), ), ], ), ), ); } } class LoginPage extends ConsumerWidget { const LoginPage({super.key}); static String get routeName => 'login'; static String get routeLocation => '/$routeName'; @override Widget build(BuildContext context, WidgetRef ref) { return Scaffold( appBar: null, body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ const Text("Login Page"), ElevatedButton( onPressed: () async { await FirebaseAuth.instance.signInAnonymously(); }, child: const Text("Login"), ), ], ), ), ); } } class SplashPage extends StatelessWidget { const SplashPage({super.key}); static String get routeName => 'splash'; static String get routeLocation => '/$routeName'; @override Widget build(BuildContext context) { return const Scaffold( body: Center(child: Text("Splash Page")), ); } }