feat(apps): 重构 UI 架构为 presentation 层并新增 l10n 国际化支持

This commit is contained in:
qzl
2026-03-27 14:05:03 +08:00
parent b1f0eb8921
commit c592cc7854
178 changed files with 10748 additions and 5764 deletions
+22 -13
View File
@@ -2,6 +2,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:lucide_icons/lucide_icons.dart';
import '../../core/l10n/l10n.dart';
import '../../core/theme/design_tokens.dart';
import 'app_loading_indicator.dart';
@@ -37,10 +38,10 @@ class MessageComposer extends StatelessWidget {
required this.onHoldToSpeakCancel,
required this.textInputChild,
required this.recordingAnimation,
this.holdToSpeakText = '按住说话',
this.recordingText = '松开发送',
this.transcribingText = '语音识别中...',
this.recordingHintText = '松开发送,上滑取消',
this.holdToSpeakText,
this.recordingText,
this.transcribingText,
this.recordingHintText,
this.showRecordingInlineFeedback = true,
});
@@ -58,10 +59,10 @@ class MessageComposer extends StatelessWidget {
final VoidCallback onHoldToSpeakCancel;
final Widget textInputChild;
final Widget recordingAnimation;
final String holdToSpeakText;
final String recordingText;
final String transcribingText;
final String recordingHintText;
final String? holdToSpeakText;
final String? recordingText;
final String? transcribingText;
final String? recordingHintText;
final bool showRecordingInlineFeedback;
bool get _isHoldMode => mode == MessageComposerMode.holdToSpeak;
@@ -193,12 +194,20 @@ class MessageComposer extends StatelessWidget {
}
Widget _buildHoldToSpeakContent() {
final l10n = L10n.current;
final resolvedRecordingText =
recordingText ?? l10n.homeRecordingReleaseSend;
final resolvedRecordingHintText =
recordingHintText ?? l10n.homeRecordingHintReleaseSend;
final resolvedTranscribingText = transcribingText ?? l10n.homeTranscribing;
final resolvedHoldToSpeakText = holdToSpeakText ?? l10n.homeHoldToSpeakText;
if (_isRecording) {
if (!showRecordingInlineFeedback) {
return Align(
alignment: Alignment.center,
child: Text(
recordingText,
resolvedRecordingText,
style: const TextStyle(color: AppColors.slate700),
),
);
@@ -210,12 +219,12 @@ class MessageComposer extends StatelessWidget {
recordingAnimation,
const SizedBox(height: AppSpacing.xs),
Text(
recordingText,
resolvedRecordingText,
style: const TextStyle(color: AppColors.slate700),
),
const SizedBox(height: AppSpacing.xs),
Text(
recordingHintText,
resolvedRecordingHintText,
key: messageComposerRecordingHintKey,
style: const TextStyle(color: AppColors.slate500),
),
@@ -227,7 +236,7 @@ class MessageComposer extends StatelessWidget {
return Align(
alignment: Alignment.center,
child: Text(
transcribingText,
resolvedTranscribingText,
style: const TextStyle(color: AppColors.slate500),
),
);
@@ -236,7 +245,7 @@ class MessageComposer extends StatelessWidget {
return Align(
alignment: Alignment.center,
child: Text(
holdToSpeakText,
resolvedHoldToSpeakText,
style: const TextStyle(color: AppColors.slate500),
),
);