fix(flutter): some ai chat bugs (#6969)

* chore: add hover effect and fix radius

* chore: open ref page on mobile
This commit is contained in:
Richard Shiue 2024-12-11 21:48:38 +08:00 committed by GitHub
parent 62d5d66d20
commit e8f2940024
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 45 additions and 34 deletions

View File

@ -1,6 +1,8 @@
import 'dart:async';
import 'dart:io';
import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/mobile/application/mobile_router.dart';
import 'package:appflowy/plugins/ai_chat/application/chat_bloc.dart';
import 'package:appflowy/plugins/ai_chat/application/chat_entity.dart';
import 'package:appflowy/plugins/ai_chat/application/ai_prompt_input_bloc.dart';
@ -219,7 +221,8 @@ class _ChatContentPage extends StatelessWidget {
chatId: view.id,
refSourceJsonString: refSourceJsonString,
isLastMessage: isLastMessage,
onSelectedMetadata: _onSelectMetadata,
onSelectedMetadata: (metadata) =>
_onSelectMetadata(context, metadata),
);
},
);
@ -320,7 +323,10 @@ class _ChatContentPage extends StatelessWidget {
);
}
void _onSelectMetadata(ChatMessageRefSource metadata) async {
void _onSelectMetadata(
BuildContext context,
ChatMessageRefSource metadata,
) async {
if (isURL(metadata.name)) {
late Uri uri;
try {
@ -335,16 +341,22 @@ class _ChatContentPage extends StatelessWidget {
Log.error("failed to open url $err");
}
} else {
await ViewBackendService.getView(metadata.id).fold(
(sidebarView) {
getIt<TabsBloc>().add(
TabsEvent.openSecondaryPlugin(
plugin: sidebarView.plugin(),
),
);
},
(err) => Log.error("Failed to get view: $err"),
);
final sidebarView =
await ViewBackendService.getView(metadata.id).toNullable();
if (sidebarView == null) {
return;
}
if (UniversalPlatform.isDesktop) {
getIt<TabsBloc>().add(
TabsEvent.openSecondaryPlugin(
plugin: sidebarView.plugin(),
),
);
} else {
if (context.mounted) {
unawaited(context.pushView(sidebarView));
}
}
}
}
}

View File

@ -6,8 +6,8 @@ import 'package:appflowy/workspace/application/view_title/view_title_bar_bloc.da
import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/space_icon.dart';
import 'package:appflowy_backend/protobuf/flowy-folder/protobuf.dart';
import 'package:easy_localization/easy_localization.dart' hide TextDirection;
import 'package:flowy_infra/theme_extension.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flowy_infra_ui/style_widget/hover.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:scroll_to_index/scroll_to_index.dart';
@ -273,21 +273,18 @@ class _ChatMentionPageItem extends StatelessWidget {
child: GestureDetector(
onTap: onTap,
behavior: HitTestBehavior.opaque,
child: Container(
height: _itemHeight,
decoration: BoxDecoration(
color: isSelected
? AFThemeExtension.of(context).lightGreyHover
: Colors.transparent,
borderRadius: BorderRadius.circular(4.0),
),
padding: const EdgeInsets.all(4.0),
child: Row(
children: [
MentionViewIcon(view: view),
const HSpace(8.0),
Expanded(child: MentionViewTitleAndAncestors(view: view)),
],
child: FlowyHover(
isSelected: () => isSelected,
child: Container(
height: _itemHeight,
padding: const EdgeInsets.all(4.0),
child: Row(
children: [
MentionViewIcon(view: view),
const HSpace(8.0),
Expanded(child: MentionViewTitleAndAncestors(view: view)),
],
),
),
),
),

View File

@ -425,9 +425,7 @@ class ChatAIMessagePopup extends StatelessWidget {
},
);
},
child: IgnorePointer(
child: child,
),
child: child,
);
}
}

View File

@ -8,6 +8,7 @@ import 'package:flowy_infra_ui/flowy_infra_ui.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_chat_core/flutter_chat_core.dart';
import 'package:universal_platform/universal_platform.dart';
import '../layout_define.dart';
import 'ai_markdown_text.dart';
@ -82,7 +83,10 @@ class ChatAIMessageWidget extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AIMarkdownText(markdown: state.text),
IgnorePointer(
ignoring: UniversalPlatform.isMobile,
child: AIMarkdownText(markdown: state.text),
),
if (state.sources.isNotEmpty)
AIMessageMetadata(
sources: state.sources,

View File

@ -318,10 +318,10 @@ packages:
dependency: transitive
description:
name: charcode
sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306
sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a
url: "https://pub.dev"
source: hosted
version: "1.3.1"
version: "1.4.0"
checked_yaml:
dependency: transitive
description: