во-первых, я тоже новичок в флаттере, поэтому это может быть не лучшее решение, но это то, что я реализую в своем приложении для части аутентификации.
сначала я создал класс User, содержащий идентификатор для Затем пользователь создал поток пользователей для своего приложения, поэтому приложению всегда будет предоставлено это значение, и что бы ни случилось с ним в моих сервисах, это код
final FirebaseAuth _auth = FirebaseAuth.instance;
Stream<FirebaseUser> user; // firebase user
User _userFromFireBaseUser(FirebaseUser user) {
return user != null ? User(uid: user.uid) : null;
}
// //auth change user stream
Stream<User> get userStream {
return _auth.onAuthStateChanged.map(_userFromFireBaseUser);
// or we can use .map((FirebaseUser user) => _userFromFireBaseUser(user) );
}
в моем основном виджете
StreamProvider<User>.value(
lazy: false,
value: AuthService().userStream,
child: MaterialApp()//your main widget
, затем я создал класс-оболочку без статистики, который считывает значение потока и в соответствии с переходом на страницу, в моем приложении я использовал оболочку для go для входа в систему, если пользователь имеет значение null else go на страницу профиля, в вашем приложении, я думаю, это будет go на главную страницу
class ProfileWrapper extends StatelessWidget {
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
//print(user.uid);
if (user == null) {
print('no user');
return SignUpPage();
} else if (user != null) {
print('there is user');
print(user.uid);
return ProfilePage();
// print('there is user' + user.displayname);
// print('there is user' + user.photourl);
}
}
}
также вам нужно добавить пакет провайдера в свой pubspe c .yaml файл
provider: ^4.1.1
при этом вам не нужно обрабатывать какую-либо навигацию между домашней страницей и регистрацией, если ваш пользователь вошел в систему, вы автоматически перейдете на домашнюю страницу.
другое решение, если это не то, что вы ищете, после завершения функции знака Google проверьте, не является ли пользователь firebase равным нулю, если есть пользователь, перейдите на вашу домашнюю страницу