#flutter #firebase-authentication #flutter-layout
# #flutter #firebase-аутентификация #flutter-layout
Вопрос:
Привет всем. Я новичок в flutter и хочу проверить, зарегистрирован ли пользователь. Если это так, пользователь переходит на рабочий стол или заставку.
Вот мой main.dart
void main() async{
runApp(MyApp());
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
}
// ignore: must_be_immutable
class MyApp extends StatelessWidget {
String initRoute;
User user = FirebaseAuth.instance.currentUser;
getUser(){
if (user != null) {
initRoute = MainScreen.routeName;
} else {
initRoute = SplashScreen.routeName;
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Instant Tasker',
theme: theme(),
initialRoute: initRoute,
routes: routes,
);
}
}
Комментарии:
1. Можете ли вы добавить больше своего кода. Здесь я проверил ваш процесс входа в систему. После проверки кода входа я смогу решить вашу проблему
2. Это полный код main.dart
3. Где вы нашли функцию getUser()? где вы их импортировали?? Мне нужно посмотреть, иначе я не смогу помочь
4. я не импортировал. Функция getUser () только что создана там
5. Я бы посоветовал взглянуть на этот плейлист YouTube, чтобы узнать больше об использовании firebase в flutter: youtube.com /…
Ответ №1:
Правильный способ, который я вижу, — это плагин Firebase, вот как это выглядит.
в main.dart
void main() async {
WidgetsFlutterBinding.ensureInitialized();
Firebase.initializeApp().then((value) => print(value));
runApp(MyApp());
}
final FirebaseAuth auth = FirebaseAuth.instance;
String userData() {
final User user = auth.currentUser;
final uid = user.uid;
return uid;
}
если пользователь вошел в систему, он вернет uid (String), в противном случае null
Комментарии:
1. « E / flutter (27826): [ОШИБКА: flutter/lib/ui/ui_dart_state.cc(177)] Необработанное исключение: [core / no-app] Не создано приложение Firebase ‘[ПО УМОЛЧАНИЮ]’ — вызов Firebase.initializeApp()«
2. вам нужно вызвать Firebase.initializeApp()
3. хахах, лол. вы только что скопировали мое решение. лучше усердно работать
Ответ №2:
Самый простой и лучший способ определить, зарегистрирован ли пользователь уже или нет, — это использовать общие настройки.
Просто добавьте эту зависимость в свой файл pubspec.yaml.
Каждый раз, когда пользователь входит в определенное устройство, вы можете сохранить некоторое значение в виде пары ключ-значение в памяти телефона, используя общие настройки.
В следующий раз, когда пользователь откроет приложение, вы можете просто проверить, доступно ли какое-либо значение в общих настройках. Если да, то откройте начальный экран, иначе откройте заставку.
Это, безусловно, самое чистое решение.
Вы можете прочитать больше об общих настройках здесь .
Если вам все еще нужен пример кода. Оставьте комментарий, и я отредактирую ответ.
Спасибо
Комментарии:
1. Я использовал общие префиксы, как упоминалось в одном из сообщений stackoverflow, но он переместился на заставку, и это ничего не работало, даже кнопка. Не могли бы вы объяснить, как я должен его использовать.
Ответ №3:
вы должны исправить функцию getuser с помощью оператора возврата виджета, который содержит оператор возврата главного экрана, если пользователь вошел в систему, или splashscreen и использовать эту функцию в home:
Widget getUser(){
if (user != null) {
mainScreen();
} else {
splashScreen();
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Instant Tasker',
theme: theme(),
home:getUser(),
);
}
}
Комментарии:
1. он показывает, что приложение Firebase «[ПО УМОЛЧАНИЮ]» не создано — вызовите Firebase.initializeApp()……. Но я использовал Firebase.initalizeApp() в main
Ответ №4:
Спасибо всем, я решил свою проблему. Все в stackoverflow предлагали сложные решения, но все еще не решили проблему. Ошибка, которую все совершали, заключалась в том, что они использовали Firebase до инициализации FirebaseApp. Поэтому я просто вызываю runApp, когда инициализируется FirebaseApp.Вот мой код
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp().then((value) {
runApp(MyApp());
});
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
User user = FirebaseAuth.instance.currentUser;
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Instant Tasker',
theme: theme(),
initialRoute: user != null ? MainScreen.routeName : SplashScreen.routeName,
routes: routes,
);
}
}