Poprawki
Some checks failed
Build Linux App / build (push) Failing after 1m12s

This commit is contained in:
Kazimierz Ciołek
2026-07-07 22:03:36 +02:00
parent 6dd7213eb0
commit ebb7426c67
14 changed files with 886 additions and 82 deletions

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:trainhub_flutter/core/constants/ui_constants.dart';
import 'package:trainhub_flutter/core/theme/app_colors.dart';
import 'package:trainhub_flutter/domain/entities/chat_message.dart';
@@ -9,11 +10,16 @@ class MessageBubble extends StatelessWidget {
super.key,
required this.message,
required this.formattedTime,
this.onCreatePlan,
});
final ChatMessageEntity message;
final String formattedTime;
/// When set (assistant messages), shows a "create plan" action that turns
/// the reply into a real training plan.
final VoidCallback? onCreatePlan;
@override
Widget build(BuildContext context) {
final isUser = message.isUser;
@@ -21,8 +27,9 @@ class MessageBubble extends StatelessWidget {
return Padding(
padding: const EdgeInsets.only(bottom: UIConstants.spacing12),
child: Row(
mainAxisAlignment:
isUser ? MainAxisAlignment.end : MainAxisAlignment.start,
mainAxisAlignment: isUser
? MainAxisAlignment.end
: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (!isUser) ...[
@@ -34,8 +41,9 @@ class MessageBubble extends StatelessWidget {
],
Flexible(
child: Column(
crossAxisAlignment:
isUser ? CrossAxisAlignment.end : CrossAxisAlignment.start,
crossAxisAlignment: isUser
? CrossAxisAlignment.end
: CrossAxisAlignment.start,
children: [
Container(
constraints: BoxConstraints(maxWidth: maxWidth),
@@ -84,12 +92,50 @@ class MessageBubble extends StatelessWidget {
const SizedBox(height: 4),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 4),
child: Text(
formattedTime,
style: const TextStyle(
color: AppColors.textMuted,
fontSize: 11,
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
formattedTime,
style: const TextStyle(
color: AppColors.textMuted,
fontSize: 11,
),
),
if (!isUser && onCreatePlan != null) ...[
const SizedBox(width: UIConstants.spacing12),
InkWell(
onTap: onCreatePlan,
borderRadius: BorderRadius.circular(4),
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 4,
vertical: 2,
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(
Icons.playlist_add_rounded,
size: 13,
color: AppColors.accent,
),
const SizedBox(width: 4),
Text(
'CREATE PLAN',
style: GoogleFonts.jetBrainsMono(
fontSize: 9,
fontWeight: FontWeight.w600,
letterSpacing: 0.8,
color: AppColors.accent,
),
),
],
),
),
),
],
],
),
),
],