Flutter Firebaseauthentication - StreamBuilder, возникают проблемы с отображением домашнего экрана - PullRequest
0 голосов
/ 03 ноября 2019

Я использую StreamBuilder, чтобы помочь мне перейти на домашний экран после аутентификации, но после этого я использовал StreamBuilder и пытался запускать его всякий раз, когда есть какие-либо изменения в authstate, но, похоже, он не работает. Мой построитель потоков не работает, и я не могу понять, почему !!

Основной файл, в котором был streambulder

 import 'package:firebase_auth/firebase_auth.dart';
 import 'package:flutter/material.dart';
 import 'package:memoii_book/Screens/feed_screen.dart';
import 'package:memoii_book/Screens/home_screen.dart';
import 'package:memoii_book/Screens/login_Screen.dart';
import 'package:memoii_book/Screens/signup_Screen.dart.';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  Widget getScreenId() {
    return StreamBuilder<FirebaseUser>(
      stream: FirebaseAuth.instance.onAuthStateChanged,
      builder: (
        BuildContext context,
        snapshot,
      ) {

        if (snapshot.hasData) {
          return HomeScreen();
        } else {
          print('yo');

          return loginScreen();
        }
      },
    );
  }

  // This widget is the root of your application.

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'MemoiiBook',
      debugShowCheckedModeBanner: false,
      home: getScreenId(),
      routes: {
        loginScreen.id: (context) => loginScreen(),
        SignupScreen.id: (context) => SignupScreen(),
        FeedScreen.id: (context) => FeedScreen(),
      },
    );
  }
}

Класс, который я использую для запуска функций аутентификации

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:memoii_book/Screens/feed_screen.dart';
import 'package:memoii_book/Screens/login_Screen.dart';

class AuthService {
  static final auth = FirebaseAuth.instance;
  static final firestore = Firestore.instance;

  static BuildContext get context1 => null;



  static void signUpUser(
      BuildContext context, String name, String email, String password) async {
    try {
      AuthResult authResult = await auth.createUserWithEmailAndPassword(
        email: email,
        password: password,
      );
      FirebaseUser signedInUser = authResult.user;
      if (signedInUser != null) {
        firestore.collection('users').document(signedInUser.uid).setData({
          'name': name,
          'email': email,
          'profileImageUrl': '',
        });
        Navigator.pushReplacementNamed(context, FeedScreen.id);

      }
    } catch (e) {
      print(e);
    }
  }

  static void logout(BuildContext context)
  {

auth.signOut();
Navigator.pushReplacementNamed(context, loginScreen.id);


  }

  static void login(String email,String password) async
  {try{

    await auth.signInWithEmailAndPassword(email: email, password: password);



  }
    catch(e)
    {
      print(e);
    }


  }
}

Экран входа в систему

import 'package:flutter/material.dart';
import 'package:memoii_book/Screens/signup_Screen.dart' as prefix0;
import 'package:memoii_book/Screens/signup_Screen.dart.';
import 'package:memoii_book/services/auth_service.dart';

class loginScreen extends StatefulWidget {
  static final String id = 'login_Screen';

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

class _loginScreenState extends State<loginScreen> {
  final formkey = GlobalKey<FormState>();
  String email, password;

  submit() {
    if (formkey.currentState.validate()) {
      formkey.currentState.save();
      // Logging in the user w/ Firebase

        AuthService.login(email, password);



    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Container(
          height: MediaQuery.of(context).size.height,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: <Widget>[
              Text(
                'MemoiiBook',
                style: TextStyle(
                    fontFamily: 'Billabong',
                    fontSize: 50,
                    fontWeight: FontWeight.bold),
              ),
              Form(
                key: formkey,
                child: Column(
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    Padding(
                      padding: EdgeInsets.symmetric(
                        horizontal: 30.0,
                        vertical: 10.0,
                      ),
                      child: TextFormField(
                        decoration: InputDecoration(labelText: 'Email'),
                        validator: (input) => !input.contains('@')
                            ? 'please enter a valid email'
                            : null,
                        onSaved: (input) => email = input,
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.symmetric(
                        horizontal: 30.0,
                        vertical: 10.0,
                      ),
                      child: TextFormField(
                        decoration: InputDecoration(labelText: 'password'),
                        validator: (input) => input.length < 6
                            ? 'The password must atleast be 6 characters'
                            : null,
                        onSaved: (input) => password = input,
                        obscureText: true,
                      ),
                    ),
                    SizedBox(
                      height: 20.0,
                    ),
                    Container(
                      width: 250.0,
                      child: FlatButton(
                        onPressed: submit,
                        color: Colors.blue,
                        padding: EdgeInsets.all(10.0),
                        child: Text(
                          'Login',
                          style: TextStyle(
                            color: Colors.white,
                            fontSize: 18.0,
                          ),
                        ),
                      ),
                    ),
                    SizedBox(
                      height: 20.0,
                    ),
                    Container(
                      width: 250.0,
                      child: FlatButton(
                        onPressed: () =>
                            Navigator.pushNamed(context, SignupScreen.id),
                        color: Colors.blue,
                        padding: EdgeInsets.all(10.0),
                        child: Text(
                          'Sign Up',
                          style: TextStyle(
                            color: Colors.white,
                            fontSize: 18.0,
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...