feat(apps): 重构 UI 架构为 presentation 层并新增 l10n 国际化支持
This commit is contained in:
@@ -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),
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user