добавлены анимации на экране сообщений, добавлено редактирование профиля (локально), изменена панель сообщений

добавлен баг с незагрузкой аватарок в чатах
This commit is contained in:
needle10
2025-11-27 20:06:11 +03:00
parent ad943e0936
commit 9745370613
26 changed files with 3782 additions and 1008 deletions

View File

@@ -0,0 +1,95 @@
import 'package:flutter/material.dart';
import 'package:gwid/screens/edit_contact_screen.dart';
class ContactDisplayName extends StatefulWidget {
final int contactId;
final String? originalFirstName;
final String? originalLastName;
final String? fallbackName;
final TextStyle? style;
final int? maxLines;
final TextOverflow? overflow;
const ContactDisplayName({
super.key,
required this.contactId,
this.originalFirstName,
this.originalLastName,
this.fallbackName,
this.style,
this.maxLines,
this.overflow,
});
@override
State<ContactDisplayName> createState() => _ContactDisplayNameState();
}
class _ContactDisplayNameState extends State<ContactDisplayName> {
String? _localFirstName;
String? _localLastName;
bool _isLoading = true;
@override
void initState() {
super.initState();
_loadLocalData();
}
@override
void didUpdateWidget(ContactDisplayName oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.contactId != widget.contactId) {
_loadLocalData();
}
}
Future<void> _loadLocalData() async {
setState(() {
_isLoading = true;
});
final localData = await ContactLocalDataHelper.getContactData(
widget.contactId,
);
if (mounted) {
setState(() {
_localFirstName = localData?['firstName'] as String?;
_localLastName = localData?['lastName'] as String?;
_isLoading = false;
});
}
}
String get _displayName {
final firstName = _localFirstName ?? widget.originalFirstName ?? '';
final lastName = _localLastName ?? widget.originalLastName ?? '';
final fullName = '$firstName $lastName'.trim();
if (fullName.isNotEmpty) {
return fullName;
}
return widget.fallbackName ?? 'ID ${widget.contactId}';
}
@override
Widget build(BuildContext context) {
if (_isLoading) {
return Text(
widget.fallbackName ?? '...',
style: widget.style,
maxLines: widget.maxLines,
overflow: widget.overflow,
);
}
return Text(
_displayName,
style: widget.style,
maxLines: widget.maxLines,
overflow: widget.overflow,
);
}
}