[*] Электронные письма клиентов могут войти в систему для входа в поставщики услуг < /li>
Различные экраны клиентов и парикмахерских не являются должным образом < /li>
Дифференциация пользователя не работает, как ожидается < /li>
< /ol>
< /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p> < /p>. /> usermodel.dart:образной
Код: Выделить всё
class UserModel {
final String uid;
final String name;
final String fullName;
final String email;
final String? phoneNumber;
final bool isServiceProvider;
// other fields...
UserModel({
required this.uid,
required String name,
String? fullName,
required this.email,
this.phoneNumber,
required this.isServiceProvider,
// other parameters...
}) : this.name = name,
this.fullName = fullName ?? name;
Map toMap() {
return {
'uid': uid,
'name': name,
'fullName': fullName,
'email': email,
'phoneNumber': phoneNumber,
'isServiceProvider': isServiceProvider,
// other fields...
};
}
factory UserModel.fromMap(Map map) {
return UserModel(
uid: map['uid'] ?? '',
name: map['name'] ?? map['fullName'] ?? '',
fullName: map['fullName'] ?? map['name'] ?? '',
email: map['email'] ?? '',
phoneNumber: map['phoneNumber'],
isServiceProvider: map['isServiceProvider'] ?? false,
// other fields...
);
}
}
Код: Выделить всё
class _HomePageState extends State {
final AuthService _authService = AuthService();
final FirestoreService _firestoreService = FirestoreService();
int _selectedIndex = 0;
bool _isLoading = false;
UserModel? _userData;
@override
void initState() {
super.initState();
_userData = widget.userData;
_loadUserData();
}
Future _loadUserData() async {
try {
setState(() => _isLoading = true);
final updatedUserData = await _firestoreService.getUserById(_userData!.uid);
if (updatedUserData != null) {
setState(() {
_userData = updatedUserData;
_isLoading = false;
});
}
} catch (e) {
print('Error loading user data: $e');
setState(() => _isLoading = false);
}
}
@override
Widget build(BuildContext context) {
if (_isLoading || _userData == null) {
return const Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
}
// Print debug information
print('User type: ${_userData!.isServiceProvider ? 'Barber' : 'Customer'}');
print('User data: ${_userData!.toMap()}');
return _userData!.isServiceProvider
? BarberHomePage(userData: _userData!)
: CustomerHomePage(userData: _userData!);
}
}
void _getUserDataAndNavigate(String uid) async {
try {
final firestoreService = FirestoreService();
final userData = await firestoreService.getUserById(uid);
if (userData != null) {
print('User data loaded: ${userData.toMap()}');
print('Is service provider: ${userData.isServiceProvider}');
if (mounted) {
// Navigate based on user type
if (userData.isServiceProvider) {
print('Navigating to BarberHomePage');
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => BarberHomePage(
userData: userData,
),
),
);
} else {
print('Navigating to CustomerHomePage');
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => CustomerHomePage(
userData: userData,
),
),
);
}
}
} else {
print("No user data found for UID: $uid");
// Error handling...
}
} catch (e) {
print("Error getting user data: $e");
// Error handling...
}
}
< /code>
Приложение использует аутентификацию Firebase и Firestore для управления пользователями. Тип пользователя хранится в Firestore с помощью IsserviceProvider < /code> Boolean Field. < /P>
Я пробовал: < /p>
Создание eSserviceProvider в качестве необходимого поля в usermodel < /li>
Добавление правильных состояний загрузки. Flow < /li>
Перезагружая пользовательские данные на Homepage init < /li>
Обеспечение правильной обработки ошибок в входе в систему и навигации < /li>
< /ol>
Текущее поведение: < /p>
- Когда клиент входит в систему с их электронной почтой, они иногда восстанавливаются в Brber> < /> < /> < /> < /> < /li>. Приложение не последовательно отображает правильный экран, основанный на типе пользователя < /li>
Журналы отладки показывают, что IsserviceProvider иногда не установлен или полученным < /li>
BarberhomePage и CustomerHomePage Components не вводя в свои специфические функции < /li>
Уличие для каждого пользовательского типа (такие варианты клиентских пасторов). Появление < /li>
< /ul>
Проблемы рендеринга экрана: < /p>
Особенности специфики для бортометражных. Расписание) < /li>
Недавние списки назначений < /li>
Варианты управления услугами < /li>
< /ul>
< /li>
Customerhomepage Specifice. Интерфейс < /li>
Раздел профиля клиента < /li>
История встреч < /li>
< /ul>
< /li>
Проблемы с общим рендерингом: < /p>
. /> Навигация между экранами является несовместимой < /li>
Некоторые элементы пользовательского интерфейса появляются в неправильном пользовательском контексте < /li>
< /ul>
< /li>
< /ol>
Ожидаемое поведение: < /p>
. BarberhomePage < /li>
Поле IsserviceProvider должно быть правильно установлено во время регистрации и получено во время входа в систему < /li>
< /ul>
Журналы ошибок:
i /flutter (21999): обнаруженная ошибка в Succeplated): 2199 (2199 (2199 (2199 (2199). CAI3HD5KGXTRLF4IPEJWM9FUPMS2
I /Flutter (21999): FireBaseauthexception во время входа в систему: extred -user - cai3hd5kgxtrlf4ipejwm9fupms2
i /rhrumptr CAI3HD5KGXTRLF4IPEJWM9FUPMS2 < /p>
Окружающая среда: < /p>
Флэттерная версия: 3.10.0 < /li>
Firebase Версия: Firebase_core: ^2.15.0, Firebase_auth: ^4.7.2, gistbase_core: ^2.15.0, firebase_auth: ^4.7.2, cootbase_core: ^2. ^4.8.4 - Платформа: Android (SM A125F)
Подробнее здесь: https://stackoverflow.com/questions/795 ... provider-s