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/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/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:easy_localization/easy_localization.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
@ -20,6 +21,7 @@ class DesktopGridRelationCellSkin extends IEditableRelationCellSkin {
RelationCellState state,
PopoverController popoverController,
) {
final userWorkspaceBloc = context.read<UserWorkspaceBloc>();
return AppFlowyPopover(
controller: popoverController,
direction: PopoverDirection.bottomWithLeftAligned,
@ -27,8 +29,11 @@ class DesktopGridRelationCellSkin extends IEditableRelationCellSkin {
margin: EdgeInsets.zero,
onClose: () => cellContainerNotifier.isFocus = false,
popupBuilder: (context) {
return BlocProvider.value(
value: bloc,
return MultiBlocProvider(
providers: [
BlocProvider.value(value: userWorkspaceBloc),
BlocProvider.value(value: bloc),
],
child: const RelationCellEditor(),
);
},

View File

@ -1,7 +1,8 @@
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/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:easy_localization/easy_localization.dart';
import 'package:flowy_infra_ui/flowy_infra_ui.dart';
@ -19,6 +20,7 @@ class DesktopRowDetailRelationCellSkin extends IEditableRelationCellSkin {
RelationCellState state,
PopoverController popoverController,
) {
final userWorkspaceBloc = context.read<UserWorkspaceBloc>();
return AppFlowyPopover(
controller: popoverController,
direction: PopoverDirection.bottomWithLeftAligned,
@ -27,8 +29,11 @@ class DesktopRowDetailRelationCellSkin extends IEditableRelationCellSkin {
asBarrier: true,
onClose: () => cellContainerNotifier.isFocus = false,
popupBuilder: (context) {
return BlocProvider.value(
value: bloc,
return MultiBlocProvider(
providers: [
BlocProvider.value(value: userWorkspaceBloc),
BlocProvider.value(value: bloc),
],
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/startup/startup.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_backend/dispatch/dispatch.dart';
import 'package:appflowy_backend/log.dart';
@ -112,8 +113,11 @@ class _RelationCellEditorContentState
@override
Widget build(BuildContext context) {
return BlocProvider.value(
value: bloc,
return MultiBlocProvider(
providers: [
BlocProvider.value(value: bloc),
BlocProvider.value(value: context.read<UserWorkspaceBloc>()),
],
child: BlocBuilder<RelationRowSearchBloc, RelationRowSearchState>(
buildWhen: (previous, current) =>
!listEquals(previous.filteredRows, current.filteredRows),
@ -316,13 +320,16 @@ class _SearchField extends StatelessWidget {
FlowyOverlay.show(
context: context,
builder: (BuildContext overlayContext) {
return RelatedRowDetailPage(
databaseId: context
.read<RelationCellBloc>()
.state
.relatedDatabaseMeta!
.databaseId,
rowId: row.rowId,
return BlocProvider.value(
value: context.read<UserWorkspaceBloc>(),
child: RelatedRowDetailPage(
databaseId: context
.read<RelationCellBloc>()
.state
.relatedDatabaseMeta!
.databaseId,
rowId: row.rowId,
),
);
},
);
@ -391,13 +398,17 @@ class _RowListItem extends StatelessWidget {
),
child: GestureDetector(
onTap: () {
final userWorkspaceBloc = context.read<UserWorkspaceBloc>();
if (isSelected) {
FlowyOverlay.show(
context: context,
builder: (BuildContext overlayContext) {
return RelatedRowDetailPage(
databaseId: databaseId,
rowId: row.rowId,
return BlocProvider.value(
value: userWorkspaceBloc,
child: RelatedRowDetailPage(
databaseId: databaseId,
rowId: row.rowId,
),
);
},
);

View File

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