Как проверить, выполнен ли вход пользователя в Flutter Firebase

#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,
    );
  }
}