feat(ui): mobile UI v2 — contrast, avatars, room-list density, compose FAB, gradient login (v1.8.0+12)
From a 7-agent design workflow (3 lenses judged + synthesised). Shipped the high-impact/low-risk tier: - message bubbles: self #1265ED (WCAG AA pass), incoming #1C2452 + hairline - deterministic per-user avatar colours (8-hue brand palette) - room tile: brighter unread preview, compact density, aligned timestamp - FAB -> New message (thumb zone), explore -> AppBar - login + welcome brand gradient, card outlines - input maxLines cap, bubble max-width viewport fraction, AppBar hairline All verified on production build in headless Chromium at mobile size. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
// Version: 1.3.1 | Created: 2026-04-01 | Updated: 2026-07-03
|
||||
// Version: 1.4.0 | Created: 2026-04-01 | Updated: 2026-07-04
|
||||
// Message bubble widget. Handles text, images, files, redacted, replies.
|
||||
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
import '../../../app/theme.dart';
|
||||
import '../../../shared/widgets/matrix_avatar.dart';
|
||||
import '../domain/message_model.dart';
|
||||
|
||||
@@ -79,14 +80,19 @@ class _BubbleContent extends StatelessWidget {
|
||||
final theme = Theme.of(context);
|
||||
|
||||
final bgColour = isMine
|
||||
? theme.colorScheme.primary
|
||||
: theme.colorScheme.surfaceContainerHighest;
|
||||
? M8Colours.selfBubble
|
||||
: M8Colours.darkSurfaceVariant;
|
||||
final textColour = isMine ? Colors.white : theme.colorScheme.onSurface;
|
||||
final maxBubbleWidth =
|
||||
(MediaQuery.sizeOf(context).width.clamp(0, 560) * 0.78).toDouble();
|
||||
|
||||
return Container(
|
||||
constraints: const BoxConstraints(maxWidth: 320),
|
||||
constraints: BoxConstraints(maxWidth: maxBubbleWidth),
|
||||
decoration: BoxDecoration(
|
||||
color: bgColour,
|
||||
border: isMine
|
||||
? null
|
||||
: Border.all(color: theme.colorScheme.outline.withAlpha(31)),
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: const Radius.circular(16),
|
||||
topRight: const Radius.circular(16),
|
||||
|
||||
Reference in New Issue
Block a user