#ios #flutter #firebase-authentication
# #iOS #флаттер #firebase-аутентификация
Вопрос:
Я использую flutter на ios, и я использовал firebase_auth 0.16.1 (с firebase_core) 0.4.4, и мой проект в основном работал, но моим пользователям нужно было каждый раз проходить авторизацию. Телефон отказался запоминать что-либо о предыдущих попытках входа в систему, что теперь стало проблемой.
Итак, после некоторого изучения я обнаружил, что Firebase_auth внедрил некоторые обновления, которые (должны) решить эту проблему, однако моя реализация явно отсутствует.
Итак, я обновился до firebase_auth 0.18.3 с помощью firebase_core 0.5.2, для чего, по-видимому, сначала требуется этап инициализации. Я скопировал этот код непосредственно с их веб-сайта, но все, что он делает, это выдает ошибку.
Итак, это то, что у меня есть прямо сейчас.
FirebaseAuth auth = FirebaseAuth.instance;
class PreValidation extends StatelessWidget {
final Future<FirebaseApp> _initialization = Firebase.initializeApp();
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: _initialization,
builder: (context, snapshot) {
if (snapshot.hasError) {
print("Uh Oh");
return;
}
if (snapshot.connectionState == ConnectionState.done) {
pretest();
return;
}
}
);
}
Я получаю сообщение об ошибке, в котором говорится, что futurebuilder возвращает значение null. Я знаю, что не могу, но я не совсем уверен, что это должно возвращать. Если бы я знал, какой объект он ищет, это было бы началом.
Моя проблема в том, что мне действительно нужно запустить этот код только в начале, еще до запуска моей программы, и, если это удастся, перейдите в основную часть моего приложения, если это не удастся, пройдите аутентификацию. И вся эта настройка класса из firebase действительно настроена как базовый класс, что на самом деле не то, что я здесь делаю.
Ответ №1:
Попробуйте обновить main()
свою функцию (протестирована и работает на Flutter 1.22, firebase_auth: ^ 0.18.1 1 и firebase_core: ^ 0.5.0:
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Test',
home: FutureBuilder(
future: Firebase.initializeApp(),
builder: (context, snapshot) {
if (snapshot.hasError) {
print('error');
}
if (snapshot.connectionState == ConnectionState.done) {
pretest();
return;
}
return Loading();
},
),
);
}
}