Я использую 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,
),
),
),
),
],
),
),
],
),
),
),
);
}
}