Я создал приложение во флаттере, которое использует provider
для управления состоянием и firebase для аутентификации. Я новичок во флаттере, и я не уверен, как использовать provider
с firebase
в флаттере.
Любой, как я нашел способ сделать это, в котором я не уверен. И это сработало, оно создает пользователя в базе данных, но проблема, когда я регистрирую нового пользователя, вызывает сбой моего приложения.
Это мой код.
register_screen.dart
child: Container(
decoration:
BoxDecoration(color: Color(kFloatingActionButtonColor)),
child: Consumer<UserProvider>(
builder: (context, userProvider, child) {
return FlatButton(
onPressed: () async{
try {
var newUser = await userProvider.register(emailText, passwordText);
if(newUser != null) {
Navigator.pushNamed(context, HomeScreen.id);
}
}catch(e) {
print(e);
}
},
child: Text(
'REGISTER',
style: TextStyle(color: Colors.white, fontSize: 20.0),
),
);
},
),
),
user_provider.dart
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/foundation.dart';
enum Status {Uninitialized, Authenticated, Authenticating, Unauthenticated}
class UserProvider extends ChangeNotifier {
FirebaseAuth _auth;
FirebaseUser _user;
Status _status = Status.Uninitialized;
UserProvider.instance(): _auth = FirebaseAuth.instance {
_auth.onAuthStateChanged.listen(_onAuthStateChanged);
}
Status get status => _status;
FirebaseUser get user => _user;
Future<bool>register(String email, String password) async{
try {
_status = Status.Authenticating;
notifyListeners();
await _auth.createUserWithEmailAndPassword(email: email, password:password);
return true;
}catch(e) {
_status = Status.Unauthenticated;
notifyListeners();
return false;
}
}
Future<void>_onAuthStateChanged(FirebaseUser firebaseUser)async {
if(firebaseUser == null) {
_status = Status.Unauthenticated;
}else {
_user = firebaseUser;
_status = Status.Authenticated;
}
notifyListeners();
}
}
Любая помощь будет отличной. Спасибо.