Flutter 路由与 Firebase 身份验证相结合

Posted

技术标签:

【中文标题】Flutter 路由与 Firebase 身份验证相结合【英文标题】:Flutter routes in combination with Firebase Auth 【发布时间】:2021-06-04 22:11:42 【问题描述】:

我正在开发一个网络应用程序,并且对路由有疑问。 如何结合 Firebase Auth 进行路由?

在互联网上,我看到很多使用 AuthenticationWrapper 的示例。 如果您已登录,您将进入主页,如果您未登录,您将进入登录页面。 那部分有效。但在应用程序中我想制作更多路线。

我了解到(下面的示例 1)您可以在 MaterialApp 中创建路线。我有 试图完成这项工作,但没有成功。

如何结合 Firebase 身份验证进行路由,并且当用户未登录时,它会导航到登录页面?

我很想听听您对此问题的意见。提前致谢!

Main.dart:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';


Future<void> main() async 
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());



class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MultiProvider(
        providers: [
          Provider<AuthenticationService>(
            create: (_) => AuthenticationService(FirebaseAuth.instance),
          ),
          StreamProvider(
            create: (context) =>
                context.read<AuthenticationService>().authStateChanges,
          )
        ],
        child: MaterialApp(
            title: 'Name of the app', 
            theme: ThemeData(
              primarySwatch: Colors.blue,
              visualDensity: VisualDensity.adaptivePlatformDensity,
            ),
            home: AuthenticationWrapper(),
        ));
  


class AuthenticationWrapper extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    final firebaseUser = context.watch<User>();

    if (firebaseUser != null) 
      // Page after loggin in
      return HomePage(); 
    
    // Sign in page
    return SignInPage();
  

示例 1:

MaterialApp(
  // Start the app with the "/" named route. In this case, the app starts
  // on the FirstScreen widget.
  initialRoute: '/',
  routes: 
    // When navigating to the "/" route, build the FirstScreen widget.
    '/': (context) => FirstScreen(),
    // When navigating to the "/second" route, build the SecondScreen widget.
    '/second': (context) => SecondScreen(),
  ,
);

【问题讨论】:

你能详细说明一下吗? (如何结合 Firebase Auth 进行路由,当用户未登录时,它会导航到登录页面?) 当您进入需要拥有帐户的页面时。但是您没有登录,它重定向到登录页面。 (先登录再看内容) 我想知道如何制作多条路线以及每次检查用户是否已登录。 【参考方案1】:

你可以做的是创建一个自定义函数,在你的应用中拥有你想要的所有可能性,当你想检查用户的状态时调用特定的函数

void _check(String username) 
      if(user has account) 
        if(loggedin) 
          Navigator.pushReplacementNamed(context, Home.id);
         else  //if not logged in
          Navigator.pushReplacementNamed(context, SignIn.id);
        
       else  // if dont have account
        Navigator.pushReplacementNamed(context, SignUP.id);
      

【讨论】:

以上是关于Flutter 路由与 Firebase 身份验证相结合的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Flutter Bloc 与 Firebase 电话身份验证一起使用

Flutter Firebase 身份验证与 Google 应用程序崩溃

Flutter Firebase signInWithCustomToken 与现有身份验证系统的用户 ID?

成功身份验证后,Flutter Firebase 数据库权限被拒绝

Flutter Firebase 电话身份验证不起作用

Firebase 身份验证不会在 Flutter 中保留在 iOS 或 Android 上