Я хочу знать, как оставаться в системе при запуске приложения с использованием firebase - PullRequest
0 голосов
/ 30 марта 2020

В настоящее время я испытываю трудности с необходимостью go повторной аутентификации при входе и выходе из системы.

Существующий метод входа в Firebase, похоже, изменил много информации, поэтому также трудно получить доступ.

страница входа

import 'package:firebase_auth/firebase_auth.dart';
import 'package:aciel_pro/screens/home_screen.dart';
import 'package:flutter/material.dart';

class LoginPage extends StatelessWidget {
  final _phoneController = TextEditingController();
  final _codeController = TextEditingController();

  Future<bool> loginUser(String phone, BuildContext context) async{
    FirebaseAuth _auth = FirebaseAuth.instance;

    _auth.verifyPhoneNumber(
        phoneNumber: phone,
        timeout: Duration(seconds: 60),
        verificationCompleted: (AuthCredential credential) async{
          Navigator.of(context).pop();

          AuthResult result = await _auth.signInWithCredential(credential);

          FirebaseUser user = result.user;

          if(user != null){
            Navigator.push(context, MaterialPageRoute(
                builder: (context) => HomeScreen(user: user,)
            ));
          }else{
            print("Error");
          }

          //This callback would gets called when verification is done auto maticlly
        },
        verificationFailed: (AuthException exception){
          print(exception);
        },
        codeSent: (String verificationId, [int forceResendingToken]){
          showDialog(
              context: context,
              barrierDismissible: false,
              builder: (context) {
                return AlertDialog(
                  title: Text("Give the code?"),
                  content: Column(
                    mainAxisSize: MainAxisSize.min,
                    children: <Widget>[
                      TextField(
                        controller: _codeController,
                      ),
                    ],
                  ),
                  actions: <Widget>[
                    FlatButton(
                      child: Text("Confirm"),
                      textColor: Colors.white,
                      color: Colors.blue,
                      onPressed: () async{
                        final code = _codeController.text.trim();
                        AuthCredential credential = PhoneAuthProvider.getCredential(verificationId: verificationId, smsCode: code);

                        AuthResult result = await _auth.signInWithCredential(credential);

                        FirebaseUser user = result.user;

                        if(user != null){
                          Navigator.push(context, MaterialPageRoute(
                              builder: (context) => HomeScreen(user: user,)
                          ));
                        }else{
                          print("Error");
                        }
                      },
                    )
                  ],
                );
              }
          );
        },
        codeAutoRetrievalTimeout: null
    );
  }

HomeScreen

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:aciel_pro/sidebar/sidebar_layout.dart';

class HomeScreen extends StatelessWidget {

  final FirebaseUser user;
  HomeScreen({this.user});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
          title: 'Custom Navigation Drawer Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          debugShowCheckedModeBanner: false,
          home: MyHomePage(),
    );
  }
}

  class MyHomePage extends StatelessWidget {

    @override
    Widget build(BuildContext context) {
      return MaterialApp(
          debugShowCheckedModeBanner: false,
          theme: ThemeData(
              scaffoldBackgroundColor: Colors.white,
              primaryColor: Colors.white
          ),
          home: SideBarLayout(),
      );
    }
  }

Мне нужна помощь.

Я буду публиковать, если есть более сложные или понятные материалы.

1 Ответ

0 голосов
/ 30 марта 2020

Вы должны иметь возможность проверить FirebaseAuth.instance.currentUser() при запуске приложения и перейти либо к экрану входа в систему, либо к основному экрану в зависимости от результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...