Merge branch 'codex/web-remove-duplicate-settings-cta'

This commit is contained in:
Haitao Pan 2026-03-24 19:01:38 +08:00
commit 8cdc485eac

View File

@ -458,10 +458,17 @@ class _AssistantWorkspaceChrome extends StatelessWidget {
child: collapsed
? Row(
children: [
Expanded(
child: _ChromePill(
label: WorkspaceDestination.assistant.label,
emphasized: true,
_ChromeConversationSummary(
controller: controller,
compact: true,
),
const SizedBox(width: 8),
StatusBadge(
status: StatusInfo(
controller.assistantConnectionStatusLabel,
controller.currentAssistantConnectionState.ready
? StatusTone.success
: StatusTone.warning,
),
),
const SizedBox(width: 8),
@ -473,50 +480,80 @@ class _AssistantWorkspaceChrome extends StatelessWidget {
),
],
)
: Row(
: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Wrap(
spacing: 8,
runSpacing: 8,
crossAxisAlignment: WrapCrossAlignment.center,
children: [
_ChromePill(
icon: Icons.home_rounded,
label: appText('主页', 'Home'),
),
_ChromePill(
label: WorkspaceDestination.assistant.label,
emphasized: true,
),
],
),
),
Wrap(
spacing: 8,
runSpacing: 8,
crossAxisAlignment: WrapCrossAlignment.center,
Row(
children: [
FilledButton.icon(
onPressed: () => controller.createConversation(
target: controller.assistantExecutionTarget,
),
icon: const Icon(Icons.edit_square),
label: Text(appText('新对话', 'New conversation')),
),
OutlinedButton.icon(
onPressed: () =>
controller.openSettings(tab: SettingsTab.gateway),
icon: const Icon(Icons.tune_rounded),
label: Text(
appText('连接设置', 'Connection settings'),
Expanded(
child: Wrap(
spacing: 8,
runSpacing: 8,
crossAxisAlignment: WrapCrossAlignment.center,
children: [
_ChromePill(
icon: Icons.home_rounded,
label: appText('主页', 'Home'),
),
_ChromePill(
label: WorkspaceDestination.assistant.label,
emphasized: true,
),
],
),
),
IconButton(
key: const Key('assistant-workspace-chrome-toggle'),
tooltip: appText('折叠顶部导航', 'Collapse top navigation'),
onPressed: onToggleCollapsed,
icon: const Icon(Icons.keyboard_arrow_up_rounded),
Wrap(
spacing: 8,
runSpacing: 8,
crossAxisAlignment: WrapCrossAlignment.center,
children: [
FilledButton.icon(
onPressed: () => controller.createConversation(
target: controller.assistantExecutionTarget,
),
icon: const Icon(Icons.edit_square),
label: Text(
appText('新对话', 'New conversation'),
),
),
OutlinedButton.icon(
onPressed: () => controller.openSettings(
tab: SettingsTab.gateway,
),
icon: const Icon(Icons.tune_rounded),
label: Text(
appText('连接设置', 'Connection settings'),
),
),
IconButton(
key: const Key('assistant-workspace-chrome-toggle'),
tooltip: appText(
'折叠顶部导航',
'Collapse top navigation',
),
onPressed: onToggleCollapsed,
icon: const Icon(Icons.keyboard_arrow_up_rounded),
),
],
),
],
),
const SizedBox(height: 8),
Row(
children: [
Expanded(
child: _ChromeConversationSummary(
controller: controller,
),
),
const SizedBox(width: 8),
StatusBadge(
status: StatusInfo(
controller.assistantConnectionStatusLabel,
controller.currentAssistantConnectionState.ready
? StatusTone.success
: StatusTone.warning,
),
),
],
),
@ -1393,44 +1430,6 @@ class _ConversationWorkspace extends StatelessWidget {
return Column(
children: [
SurfaceCard(
borderRadius: 10,
tone: SurfaceCardTone.chrome,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
controller.currentConversationTitle,
style: Theme.of(context).textTheme.titleLarge
?.copyWith(fontWeight: FontWeight.w700),
),
const SizedBox(height: 4),
Text(
controller.assistantConnectionTargetLabel,
style: Theme.of(context).textTheme.bodyMedium
?.copyWith(color: palette.textSecondary),
),
],
),
),
StatusBadge(
status: StatusInfo(
controller.assistantConnectionStatusLabel,
connected ? StatusTone.success : StatusTone.warning,
),
),
],
),
],
),
),
const SizedBox(height: 8),
if (!connected)
SurfaceCard(
borderRadius: 10,
@ -1451,12 +1450,6 @@ class _ConversationWorkspace extends StatelessWidget {
),
),
),
const SizedBox(width: 12),
FilledButton.tonal(
onPressed: () =>
controller.openSettings(tab: SettingsTab.gateway),
child: Text(appText('打开设置', 'Open settings')),
),
],
),
),
@ -1853,6 +1846,47 @@ class _AssistantSessionSettingsSheetState
}
}
class _ChromeConversationSummary extends StatelessWidget {
const _ChromeConversationSummary({
required this.controller,
this.compact = false,
});
final AppController controller;
final bool compact;
@override
Widget build(BuildContext context) {
final palette = context.palette;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
controller.currentConversationTitle,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: compact
? Theme.of(context).textTheme.bodyMedium?.copyWith(
fontWeight: FontWeight.w700,
)
: Theme.of(context).textTheme.titleSmall?.copyWith(
fontWeight: FontWeight.w700,
),
),
const SizedBox(height: 2),
Text(
controller.assistantConnectionTargetLabel,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.bodySmall?.copyWith(
color: palette.textSecondary,
),
),
],
);
}
}
class _ConversationEmptyState extends StatelessWidget {
const _ConversationEmptyState({required this.controller});