forked from eatvio/eatvio_app
fix: ui overflow nav-bar, name files in chat, qr-code scanner in dev-tools, message field size, keyboard type
This commit is contained in:
@@ -28,6 +28,7 @@ class ChatBubbleWidget extends StatelessWidget {
|
||||
required this.userSlug,
|
||||
this.messageType,
|
||||
this.isConsultant,
|
||||
this.urlsMediaInfo,
|
||||
});
|
||||
|
||||
final DateTime sendTime;
|
||||
@@ -40,6 +41,7 @@ class ChatBubbleWidget extends StatelessWidget {
|
||||
final String userSlug;
|
||||
final String? messageType;
|
||||
final bool? isConsultant;
|
||||
final List<Map<String, dynamic>>? urlsMediaInfo;
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final size = MediaQuery.sizeOf(context);
|
||||
@@ -127,7 +129,57 @@ class ChatBubbleWidget extends StatelessWidget {
|
||||
fileName = mediaItem.path.split('/').last;
|
||||
} else {
|
||||
final urlString = mediaItem.toString();
|
||||
fileName = urlString.contains('/') ? urlString.split('/').last.split('?').first : urlString.replaceAll('chat_files/', '');
|
||||
// Получаем расширение файла из URL
|
||||
String? fileExtension;
|
||||
final urlParts = urlString.split('/');
|
||||
if (urlParts.isNotEmpty) {
|
||||
final lastPart = urlParts.last.split('?').first;
|
||||
final dotIndex = lastPart.lastIndexOf('.');
|
||||
if (dotIndex != -1 && dotIndex < lastPart.length - 1) {
|
||||
fileExtension = lastPart.substring(dotIndex);
|
||||
}
|
||||
}
|
||||
|
||||
// Пытаемся найти имя файла в urls_media_info
|
||||
String? fileNameFromInfo;
|
||||
final mediaInfo = urlsMediaInfo;
|
||||
if (mediaInfo != null && mediaInfo.isNotEmpty) {
|
||||
for (final mediaInfoMap in mediaInfo) {
|
||||
// Каждый элемент urls_media_info - это Map, где ключ - это URL
|
||||
if (mediaInfoMap.isNotEmpty) {
|
||||
for (final entry in mediaInfoMap.entries) {
|
||||
final infoUrl = entry.key.toString();
|
||||
// Сравниваем полные URL или только имя файла
|
||||
if (infoUrl == urlString ||
|
||||
urlString.contains(infoUrl) ||
|
||||
infoUrl.contains(urlString) ||
|
||||
urlString.split('/').last == infoUrl.split('/').last) {
|
||||
final fileInfo = entry.value;
|
||||
if (fileInfo is Map<String, dynamic> && fileInfo.containsKey('name')) {
|
||||
final nameValue = fileInfo['name'];
|
||||
if (nameValue != null) {
|
||||
fileNameFromInfo = nameValue.toString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fileNameFromInfo != null && fileNameFromInfo.isNotEmpty) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fileNameFromInfo != null && fileNameFromInfo.isNotEmpty) {
|
||||
// Добавляем расширение к названию файла, если его там нет
|
||||
if (fileExtension != null && !fileNameFromInfo.endsWith(fileExtension)) {
|
||||
fileName = '$fileNameFromInfo$fileExtension';
|
||||
} else {
|
||||
fileName = fileNameFromInfo;
|
||||
}
|
||||
} else {
|
||||
// Fallback к старой логике, если информации нет
|
||||
fileName = urlString.contains('/') ? urlString.split('/').last.split('?').first : urlString.replaceAll('chat_files/', '');
|
||||
}
|
||||
}
|
||||
|
||||
return ListTile(
|
||||
|
||||
Reference in New Issue
Block a user