Последние несколько дней я трачу много времени на чтение нескольких SO-вопросов и учебных пособий.Я пытаюсь добиться того, чтобы пользователь моего приложения-флаттера мог выбрать проект Firebase и войти в систему с помощью электронной почты / пароля.Очевидно, что после входа в систему должны отображаться правильные данные соответствующей базы данных.И вот где я терплю неудачу.
Через некоторое время чтения некоторых сайтов и вопросов от SO, я пошел на следующий сайт, чтобы получить первую часть логина.
https://firebase.googleblog.com/2016/12/working-with-multiple-firebase-projects-in-an-android-app.html
После прохождения этой статьи я смог успешно войти в мои определенные проекты Firebase.
Как я узнал, что вход в систему прошел успешно?Я сравнил пользовательские идентификаторы из проектов с оператором печати из моего приложения в консоли.Это было доказательством того, что моя конфигурация для проекта не по умолчанию верна.
Но теперь главная проблема, которую я не могу решить.После входа в систему данные всегда относятся к проекту Firebase по умолчанию из google-service.json.
Для управления состоянием я выбираю пакет провайдера, как они упоминались в I / O '19.Поэтому внутри моего main.dart я обертываю все приложение с помощью MultipleProvider:
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<LoginModel>(
builder: (_) => LoginModel(),
),
ChangeNotifierProvider<Auth>(
builder: (_) => Auth(),
),
],
child: MaterialApp(
title: 'Breaking News Tool',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: RootPage(),
),
);
}
Предоставленный класс Auth - это служба, которая подключается к firebase sdk, а также настраивает приложения не по умолчанию для создания необходимой аутентификации firebase
abstract class BaseAuth {
getDefaultAuth();
getAbnAuth();
...
}
class Auth with ChangeNotifier implements BaseAuth {
...
Auth() {
_configureAbnApp();
_configureProdApp();
}
getDefaultAuth() {
_firebaseAuth = FirebaseAuth.instance;
}
getAbnAuth() {
_firebaseAuth = FirebaseAuth.fromApp(_abnApp);
}
_configureAbnApp() {
FirebaseOptions abnOptions = FirebaseOptions(
databaseURL: 'https://[project-id].firebaseio.com',
apiKey: 'AIzaSxxxxxxxxxxxxxxxx,
googleAppID: '1:10591xxxxxxxxxxxxxxxxxxx');
FirebaseApp.configure(name: 'abn_database', options: abnOptions)
.then((result) {
_abnApp = result;
});
}
...
}
После входа в приложение приложение перенаправляет пользователя на домашнюю страницу (StatefulWidget).Здесь я использую снимок базы данных для отображения данных.
_stream = Firestore.instance.collection(collection).snapshots();
...
Center(
child: Container(
padding: const EdgeInsets.all(10.0),
child: StreamBuilder<QuerySnapshot>(
stream: _stream,
builder:
(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError)
return Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return Text('Loading...');
default:
return ListView(
children: snapshot.data.documents
.map((DocumentSnapshot document) {
return CustomCard(
docID: document.documentID,
title: document[title],
message: document[message],
fromDate: document[fromDate],
endDate: document[endDate],
disableApp: document[disableApp],
);
}).toList(),
);
}
},
),
),
),
Вначале у меня был только один проект для подключения, и данные были правильными.Но теперь я успешно подключаюсь к другому проекту с правильным user-uid, но данные всегда из проекта по умолчанию, который определяется google-service.json.И на данный момент, я понятия не имею, почему это происходит.
У кого-нибудь был совет или идея?