Merge pull request #1138 from AppFlowy-IO/fix/context_not_found

fix: can't find context after popover disappear
This commit is contained in:
Nathan.fooo
2022-09-23 16:22:29 +08:00
committed by GitHub
2 changed files with 22 additions and 17 deletions

View File

@ -93,9 +93,9 @@ class _EditFieldButton extends StatelessWidget {
} }
class _FieldOperationList extends StatelessWidget { class _FieldOperationList extends StatelessWidget {
final GridFieldCellContext fieldData; final GridFieldCellContext fieldContext;
final VoidCallback onDismissed; final VoidCallback onDismissed;
const _FieldOperationList(this.fieldData, this.onDismissed, {Key? key}) const _FieldOperationList(this.fieldContext, this.onDismissed, {Key? key})
: super(key: key); : super(key: key);
@override @override
@ -118,14 +118,14 @@ class _FieldOperationList extends StatelessWidget {
bool enable = true; bool enable = true;
switch (action) { switch (action) {
case FieldAction.delete: case FieldAction.delete:
enable = !fieldData.field.isPrimary; enable = !fieldContext.field.isPrimary;
break; break;
default: default:
break; break;
} }
return FieldActionCell( return FieldActionCell(
fieldId: fieldData.field.id, fieldContext: fieldContext,
action: action, action: action,
onTap: onDismissed, onTap: onDismissed,
enable: enable, enable: enable,
@ -136,13 +136,13 @@ class _FieldOperationList extends StatelessWidget {
} }
class FieldActionCell extends StatelessWidget { class FieldActionCell extends StatelessWidget {
final String fieldId; final GridFieldCellContext fieldContext;
final VoidCallback onTap; final VoidCallback onTap;
final FieldAction action; final FieldAction action;
final bool enable; final bool enable;
const FieldActionCell({ const FieldActionCell({
required this.fieldId, required this.fieldContext,
required this.action, required this.action,
required this.onTap, required this.onTap,
required this.enable, required this.enable,
@ -161,7 +161,7 @@ class FieldActionCell extends StatelessWidget {
hoverColor: theme.hover, hoverColor: theme.hover,
onTap: () { onTap: () {
if (enable) { if (enable) {
action.run(context); action.run(context, fieldContext);
onTap(); onTap();
} }
}, },
@ -202,7 +202,7 @@ extension _FieldActionExtension on FieldAction {
} }
} }
void run(BuildContext context) { void run(BuildContext context, GridFieldCellContext fieldContext) {
switch (this) { switch (this) {
case FieldAction.hide: case FieldAction.hide:
context context
@ -210,18 +210,24 @@ extension _FieldActionExtension on FieldAction {
.add(const FieldActionSheetEvent.hideField()); .add(const FieldActionSheetEvent.hideField());
break; break;
case FieldAction.duplicate: case FieldAction.duplicate:
context PopoverContainer.of(context).close();
.read<FieldActionSheetBloc>()
.add(const FieldActionSheetEvent.duplicateField()); FieldService(
gridId: fieldContext.gridId,
fieldId: fieldContext.field.id,
).duplicateField();
break; break;
case FieldAction.delete: case FieldAction.delete:
PopoverContainer.of(context).close(); PopoverContainer.of(context).close();
NavigatorAlertDialog( NavigatorAlertDialog(
title: LocaleKeys.grid_field_deleteFieldPromptMessage.tr(), title: LocaleKeys.grid_field_deleteFieldPromptMessage.tr(),
confirm: () { confirm: () {
context FieldService(
.read<FieldActionSheetBloc>() gridId: fieldContext.gridId,
.add(const FieldActionSheetEvent.deleteField()); fieldId: fieldContext.field.id,
).deleteField();
}, },
).show(context); ).show(context);

View File

@ -136,7 +136,6 @@ class PopoverState extends State<Popover> {
return Stack(children: children); return Stack(children: children);
}); });
_rootEntry.addEntry(context, this, newEntry, widget.asBarrier); _rootEntry.addEntry(context, this, newEntry, widget.asBarrier);
} }
@ -243,7 +242,7 @@ class PopoverContainerState extends State<PopoverContainer> {
); );
} }
close() => widget.onClose(); void close() => widget.onClose();
closeAll() => widget.onCloseAll(); void closeAll() => widget.onCloseAll();
} }