fix: can't open the relation field in the linked database (#7441)

This commit is contained in:
Lucas 2025-03-03 13:14:29 +08:00 committed by GitHub
parent 249543d64f
commit 2e17fb9dd3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 43 additions and 22 deletions

View File

@ -1,8 +1,9 @@
import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/database/grid/presentation/layout/sizes.dart';
import 'package:appflowy/plugins/database/widgets/row/cells/cell_container.dart';
import 'package:appflowy/plugins/database/widgets/cell_editor/relation_cell_editor.dart';
import 'package:appflowy/plugins/database/application/cell/bloc/relation_cell_bloc.dart'; import 'package:appflowy/plugins/database/application/cell/bloc/relation_cell_bloc.dart';
import 'package:appflowy/plugins/database/grid/presentation/layout/sizes.dart';
import 'package:appflowy/plugins/database/widgets/cell_editor/relation_cell_editor.dart';
import 'package:appflowy/plugins/database/widgets/row/cells/cell_container.dart';
import 'package:appflowy/workspace/application/user/user_workspace_bloc.dart';
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart';
@ -20,6 +21,7 @@ class DesktopGridRelationCellSkin extends IEditableRelationCellSkin {
RelationCellState state, RelationCellState state,
PopoverController popoverController, PopoverController popoverController,
) { ) {
final userWorkspaceBloc = context.read<UserWorkspaceBloc>();
return AppFlowyPopover( return AppFlowyPopover(
controller: popoverController, controller: popoverController,
direction: PopoverDirection.bottomWithLeftAligned, direction: PopoverDirection.bottomWithLeftAligned,
@ -27,8 +29,11 @@ class DesktopGridRelationCellSkin extends IEditableRelationCellSkin {
margin: EdgeInsets.zero, margin: EdgeInsets.zero,
onClose: () => cellContainerNotifier.isFocus = false, onClose: () => cellContainerNotifier.isFocus = false,
popupBuilder: (context) { popupBuilder: (context) {
return BlocProvider.value( return MultiBlocProvider(
value: bloc, providers: [
BlocProvider.value(value: userWorkspaceBloc),
BlocProvider.value(value: bloc),
],
child: const RelationCellEditor(), child: const RelationCellEditor(),
); );
}, },

View File

@ -1,7 +1,8 @@
import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:appflowy/plugins/database/widgets/row/cells/cell_container.dart';
import 'package:appflowy/plugins/database/widgets/cell_editor/relation_cell_editor.dart';
import 'package:appflowy/plugins/database/application/cell/bloc/relation_cell_bloc.dart'; import 'package:appflowy/plugins/database/application/cell/bloc/relation_cell_bloc.dart';
import 'package:appflowy/plugins/database/widgets/cell_editor/relation_cell_editor.dart';
import 'package:appflowy/plugins/database/widgets/row/cells/cell_container.dart';
import 'package:appflowy/workspace/application/user/user_workspace_bloc.dart';
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart'; import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart'; import 'package:flowy_infra_ui/flowy_infra_ui.dart';
@ -19,6 +20,7 @@ class DesktopRowDetailRelationCellSkin extends IEditableRelationCellSkin {
RelationCellState state, RelationCellState state,
PopoverController popoverController, PopoverController popoverController,
) { ) {
final userWorkspaceBloc = context.read<UserWorkspaceBloc>();
return AppFlowyPopover( return AppFlowyPopover(
controller: popoverController, controller: popoverController,
direction: PopoverDirection.bottomWithLeftAligned, direction: PopoverDirection.bottomWithLeftAligned,
@ -27,8 +29,11 @@ class DesktopRowDetailRelationCellSkin extends IEditableRelationCellSkin {
asBarrier: true, asBarrier: true,
onClose: () => cellContainerNotifier.isFocus = false, onClose: () => cellContainerNotifier.isFocus = false,
popupBuilder: (context) { popupBuilder: (context) {
return BlocProvider.value( return MultiBlocProvider(
value: bloc, providers: [
BlocProvider.value(value: userWorkspaceBloc),
BlocProvider.value(value: bloc),
],
child: const RelationCellEditor(), child: const RelationCellEditor(),
); );
}, },

View File

@ -6,6 +6,7 @@ import 'package:appflowy/plugins/database/tab_bar/tab_bar_view.dart';
import 'package:appflowy/plugins/database/widgets/row/relation_row_detail.dart'; import 'package:appflowy/plugins/database/widgets/row/relation_row_detail.dart';
import 'package:appflowy/startup/startup.dart'; import 'package:appflowy/startup/startup.dart';
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart'; import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
import 'package:appflowy/workspace/application/user/user_workspace_bloc.dart';
import 'package:appflowy/workspace/application/view/view_ext.dart'; import 'package:appflowy/workspace/application/view/view_ext.dart';
import 'package:appflowy_backend/dispatch/dispatch.dart'; import 'package:appflowy_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/log.dart'; import 'package:appflowy_backend/log.dart';
@ -112,8 +113,11 @@ class _RelationCellEditorContentState
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocProvider.value( return MultiBlocProvider(
value: bloc, providers: [
BlocProvider.value(value: bloc),
BlocProvider.value(value: context.read<UserWorkspaceBloc>()),
],
child: BlocBuilder<RelationRowSearchBloc, RelationRowSearchState>( child: BlocBuilder<RelationRowSearchBloc, RelationRowSearchState>(
buildWhen: (previous, current) => buildWhen: (previous, current) =>
!listEquals(previous.filteredRows, current.filteredRows), !listEquals(previous.filteredRows, current.filteredRows),
@ -316,13 +320,16 @@ class _SearchField extends StatelessWidget {
FlowyOverlay.show( FlowyOverlay.show(
context: context, context: context,
builder: (BuildContext overlayContext) { builder: (BuildContext overlayContext) {
return RelatedRowDetailPage( return BlocProvider.value(
value: context.read<UserWorkspaceBloc>(),
child: RelatedRowDetailPage(
databaseId: context databaseId: context
.read<RelationCellBloc>() .read<RelationCellBloc>()
.state .state
.relatedDatabaseMeta! .relatedDatabaseMeta!
.databaseId, .databaseId,
rowId: row.rowId, rowId: row.rowId,
),
); );
}, },
); );
@ -391,13 +398,17 @@ class _RowListItem extends StatelessWidget {
), ),
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
final userWorkspaceBloc = context.read<UserWorkspaceBloc>();
if (isSelected) { if (isSelected) {
FlowyOverlay.show( FlowyOverlay.show(
context: context, context: context,
builder: (BuildContext overlayContext) { builder: (BuildContext overlayContext) {
return RelatedRowDetailPage( return BlocProvider.value(
value: userWorkspaceBloc,
child: RelatedRowDetailPage(
databaseId: databaseId, databaseId: databaseId,
rowId: row.rowId, rowId: row.rowId,
),
); );
}, },
); );

View File

@ -23,7 +23,7 @@ class RelatedRowDetailPage extends StatelessWidget {
initialRowId: rowId, initialRowId: rowId,
), ),
child: BlocBuilder<RelatedRowDetailPageBloc, RelatedRowDetailPageState>( child: BlocBuilder<RelatedRowDetailPageBloc, RelatedRowDetailPageState>(
builder: (context, state) { builder: (_, state) {
return state.when( return state.when(
loading: () => const SizedBox.shrink(), loading: () => const SizedBox.shrink(),
ready: (databaseController, rowController) { ready: (databaseController, rowController) {