向Firebase Flutter注册后无法导航到主页

近藤

我试图在登录后导航到主页,这可行,我遵循了这个教程:

https://www.youtube.com/watch?v=oJ5Vrya3wCQ&t=307s

但是,我的问题是,当我去注册按钮>注册用户时,我直接进入登录页面,但是当我填写登录表单并登录时,什么也没发生,我必须做一个“热重启”才能看到我的主页,就好像某些小部件没有重建一样。所以我应该做任何更好的清洁方法来进行状态管理?

主要:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:plantsapp/screens/login_page.dart';
import 'package:plantsapp/screens/plant_screen.dart';
import 'package:plantsapp/screens/register_page.dart';
import 'package:plantsapp/screens/shop_scree_page.dart';
import 'package:plantsapp/services/authentication_service.dart';
import 'package:provider/provider.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider<AuthenticationService>(
          create: (_) => AuthenticationService(FirebaseAuth.instance),
        ),
        StreamProvider(create: (context) => context.read<AuthenticationService>().authStateChanges)
      ],
      child: MaterialApp(
        title: 'Flutter Plant Shop UI',
        debugShowCheckedModeBanner: false,
        home: AuthenticationWrapper(),
        routes: {
          'registerpage': (context) => RegisterPage(),
          'loginpage': (context) => LoginPage(),
          'homepage': (context) => PlantScreen(),
        },
        
        //theme: ThemeData.dark(),
      ),
    );
  }
}

// ignore: must_be_immutable
class AuthenticationWrapper extends StatelessWidget with ChangeNotifier{
  @override
  Widget build(BuildContext context) {
    final firebaseuser = context.watch<User>();
    notifyListeners();
    if(firebaseuser != null) {
      notifyListeners();
      return ShopScreen(); 
    } else {
      notifyListeners();
      return LoginPage();
    }
  }
}

认证服务:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';



class AuthenticationService with ChangeNotifier{
  final FirebaseAuth _firebaseAuth;

  AuthenticationService(this._firebaseAuth);

  Stream<User> get authStateChanges => _firebaseAuth.authStateChanges();

  Future<String> signIn({String email, String password}) async {
    try {
      await _firebaseAuth.signInWithEmailAndPassword(email: email, password: password);
      notifyListeners();
      return "Signed in";
    } on FirebaseAuthException catch (e) {
      print(e);
      return e.message;
    }
  }

  Future<String> signUp({String email, String password, BuildContext context}) async{
    try {
      await _firebaseAuth.createUserWithEmailAndPassword(email: email, password: password);
      print('USUARIO REGISTRADO');
      Navigator.pushReplacementNamed(context, 'loginpage');
      return "Signed Up";
    } on FirebaseAuthException catch (e) {
      print(e.message);
      return e.message;
    }
  }

  Future<void> signOut() async{
    await _firebaseAuth.signOut();
    notifyListeners();
  }

}

登录页:

import 'package:flutter/material.dart';
import 'package:plantsapp/services/authentication_service.dart';
import 'package:provider/provider.dart';

class LoginPage extends StatefulWidget{
  @override
  _LoginPageState createState() => _LoginPageState();
}

class _LoginPageState extends State<LoginPage>{
  final TextEditingController emailController = TextEditingController();
  final TextEditingController passwordController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Container(
          margin: EdgeInsets.symmetric(horizontal: 20, vertical: 80),
          padding: EdgeInsets.symmetric(horizontal: 20, vertical: 80),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Login',
                style: TextStyle(fontSize: 20),
              ),
              _emailForm(),
              _passwordForm(),
              _button(),
              _buttonRegister(),
            ],
          ),
        ),
      ),
    );
  }

  Widget _emailForm() {
    return TextField(
      controller: emailController,
      decoration: InputDecoration(hintText: ('Email')),
    );
  }

  Widget _passwordForm() {
    return TextField(
      controller: passwordController,
      decoration: InputDecoration(hintText: ('Password')),
    );
  }

  Widget _button() {
    return RaisedButton(
      child: Text('Login'),
      onPressed: () {
        Provider.of<AuthenticationService>(context, listen: false).signIn(
            email: emailController.text.trim(),
            password: passwordController.text.trim());
      },
    );
  }

  _buttonRegister() {
    return RaisedButton(
      child: Text('Registrarse'),
      onPressed: () {
        Navigator.pushReplacementNamed(context, 'registerpage');
      },
    );
  }
}

RegisterPage:

import 'package:flutter/material.dart';
import 'package:plantsapp/services/authentication_service.dart';
import 'package:provider/provider.dart';

class RegisterPage extends StatefulWidget {
  RegisterPage({Key key}) : super(key: key);

  @override
  _RegisterPageState createState() => _RegisterPageState();
}

class _RegisterPageState extends State<RegisterPage> {
  final TextEditingController emailController = TextEditingController();
  final TextEditingController passwordController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Container(
          margin: EdgeInsets.symmetric(horizontal: 20, vertical: 80),
          padding: EdgeInsets.symmetric(horizontal: 20, vertical: 80),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Registrarse',
                style: TextStyle(fontSize: 30),
              ),
              _emailForm(),
              _passwordForm(),
              _button(),
            ],
          ),
        ),
      ),
    );
  }

  Widget _emailForm() {
    return TextField(
      controller: emailController,
      decoration: InputDecoration(hintText: ('Email')),
    );
  }

  Widget _passwordForm() {
    return TextField(
      controller: passwordController,
      decoration: InputDecoration(hintText: ('Password')),
    );
  }

  Widget _button() {
    return RaisedButton(
      child: Text('Registrarse'),
      onPressed: () {
        Provider.of<AuthenticationService>(context, listen: false).signUp(
            email: emailController.text.trim(),
            password: passwordController.text.trim(),
            context: context);
      },
    );
  }
}
近藤

我发现了问题,我想与所有人分享。问题是导航器,您必须保持流程,我的应用程序在LoginPage上启动,所以我使用导航器转到RegisterPage,因此,我在RegisterPage中启动了该应用程序,而没有使用任何导航器进行测试,它向我发送了自动进入首页。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Firebase注册导航到主页时出现导航错误

来自分类Dev

无法向 Firebase 添加对象

来自分类Dev

在Android中向Firebase注册期间存储其他信息

来自分类Dev

如何从Flutter上的FirebaseFunctions向Firebase Functions发送参数

来自分类Dev

无法向 Firebase 数据库添加项目

来自分类Dev

导航到主页后swrevealcontroller无法正常工作

来自分类Dev

应用无法导航到主页

来自分类Dev

向firebase添加新数据后,如何从组件中的firebase刷新数据?

来自分类Dev

使用flutter向Firebase添加和更新文档时,Firebase接收documentID

来自分类Dev

无法使用最新的Firebase Framework向Nest Firebase读取/写入值

来自分类Dev

注册后重定向到主页

来自分类Dev

生成用于向Google Auth Android Studio Firebase注册的父UID

来自分类Dev

无法向 Mediatr 注册 IRequestPreProcessors

来自分类Dev

无法向 Citrix 注册 DVC

来自分类Dev

如何使用可观察到的Redux向Firebase`once`发出异步请求?

来自分类Dev

我的应用无法多次向Firebase发送相同的数据结构

来自分类Dev

无法在Firebase的时间戳中向Date构造函数输入变量?

来自分类Dev

Flutter Firebase Dynamic Link Navigator.push无法导航

来自分类Dev

无法注册Firebase

来自分类Dev

导航到特定屏幕后,无法使用Firebase注销

来自分类Dev

首次登录后,电子邮件注册用户displayName不显示在导航标题中(Firebase)

来自分类Dev

无法向Netflix Eureka注册Spring MicroService

来自分类Dev

Firebase 和 Ionic 1.x - 无法一次向数据库添加多个对象

来自分类Dev

向Firebase通知添加操作

来自分类Dev

向Unity注册IAuthenticationManager

来自分类Dev

向SimpleInjector注册DynaCache

来自分类Dev

向Lua注册关闭

来自分类Dev

向autofac注册ImmutableArray

来自分类Dev

使用Firebase注册后无法将用户添加到Firestore数据库

Related 相关文章

  1. 1

    从Firebase注册导航到主页时出现导航错误

  2. 2

    无法向 Firebase 添加对象

  3. 3

    在Android中向Firebase注册期间存储其他信息

  4. 4

    如何从Flutter上的FirebaseFunctions向Firebase Functions发送参数

  5. 5

    无法向 Firebase 数据库添加项目

  6. 6

    导航到主页后swrevealcontroller无法正常工作

  7. 7

    应用无法导航到主页

  8. 8

    向firebase添加新数据后,如何从组件中的firebase刷新数据?

  9. 9

    使用flutter向Firebase添加和更新文档时,Firebase接收documentID

  10. 10

    无法使用最新的Firebase Framework向Nest Firebase读取/写入值

  11. 11

    注册后重定向到主页

  12. 12

    生成用于向Google Auth Android Studio Firebase注册的父UID

  13. 13

    无法向 Mediatr 注册 IRequestPreProcessors

  14. 14

    无法向 Citrix 注册 DVC

  15. 15

    如何使用可观察到的Redux向Firebase`once`发出异步请求?

  16. 16

    我的应用无法多次向Firebase发送相同的数据结构

  17. 17

    无法在Firebase的时间戳中向Date构造函数输入变量?

  18. 18

    Flutter Firebase Dynamic Link Navigator.push无法导航

  19. 19

    无法注册Firebase

  20. 20

    导航到特定屏幕后,无法使用Firebase注销

  21. 21

    首次登录后,电子邮件注册用户displayName不显示在导航标题中(Firebase)

  22. 22

    无法向Netflix Eureka注册Spring MicroService

  23. 23

    Firebase 和 Ionic 1.x - 无法一次向数据库添加多个对象

  24. 24

    向Firebase通知添加操作

  25. 25

    向Unity注册IAuthenticationManager

  26. 26

    向SimpleInjector注册DynaCache

  27. 27

    向Lua注册关闭

  28. 28

    向autofac注册ImmutableArray

  29. 29

    使用Firebase注册后无法将用户添加到Firestore数据库

热门标签

归档