Во-первых, я не уверен, правильно ли я назвал этот вопрос, поэтому не стесняйтесь поправлять меня, если вы знаете другой лучше, чем мой.
ЧТОЯ ПЫТАЮСЬ СДЕЛАТЬ:
Я пытаюсь внедрить систему аутентификации на основе firebase, используя управление состоянием провайдера.Но я сталкиваюсь с этой проблемой ...
Поэтому я хочу иметь абстрактный класс BaseAuth, в котором у меня будут все определения функций, которые мне нужны, без вмешательства в Firebase.Поскольку я хочу держать их как можно дальше друг от друга, здесь есть сложная часть.
BaseAuth:
abstract class BaseAuth {
Future<String> login(String email, String password);
Future<String> register(String email, String password);
Future<void> onAuthStateChanged(void Function(FirebaseUser) callback);
Future<void> logout();
Future<UserData> getCurrentUser();
}
DatabaseFirebase:
class DatabaseFirebase implements BaseAuth {
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
FirebaseUser _firebaseUser;
//Some implementations bla bla bla
@override
Future<void> onAuthStateChanged(void Function(FirebaseUser) callback) async {
_firebaseAuth.onAuthStateChanged.listen(callback);
}
}
UserRepository:
class UserRepository with ChangeNotifier {
Status _status = Status.Uninitialized;
BaseAuth auth;
UserData _user;
UserRepository({@required this.auth}) {
auth.onAuthStateChanged(_onAuthStateChanged);
}
//Some implementation bla bla bla
Future<void> _onAuthStateChanged(FirebaseUser user) async {
if (user == null || user.uid == null) {
_status = Status.Unauthenticated;
} else {
auth.getCurrentUser().then((user) => _user = user);
_status = Status.Authenticated;
}
notifyListeners();
}
}
Итак, как вы можете видеть, чтобы моя система входа в систему работала, я вынужден использовать там FirebaseUser в этой функции.У вас есть идеи, как я могу отделить эту функцию?Я хочу, чтобы в BaseAuth была функция с именем onAuthStateChanged
без каких-либо параметров или с функцией с именем UserData
, которая является моей моделью пользователя.
Другими словами, могу ли я сделать мой класс BaseAuth независимым от firebase?Как должна выглядеть моя функция, чтобы она работала после рефакторинга?