fix: import panel exits on esc key (#4259) (#5062)

This commit is contained in:
Vishwa Karthik 2024-04-10 13:29:53 +05:30 committed by GitHub
parent d35742d34c
commit 3bbba2eeb4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,7 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'dart:typed_data';
import 'package:appflowy/plugins/document/application/document_data_pb_extension.dart'; import 'package:appflowy/plugins/document/application/document_data_pb_extension.dart';
import 'package:appflowy/plugins/document/presentation/editor_plugins/migration/editor_migration.dart'; import 'package:appflowy/plugins/document/presentation/editor_plugins/migration/editor_migration.dart';
import 'package:appflowy/startup/startup.dart'; import 'package:appflowy/startup/startup.dart';
@ -16,6 +14,7 @@ import 'package:flowy_infra_ui/style_widget/container.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:appflowy/generated/locale_keys.g.dart'; import 'package:appflowy/generated/locale_keys.g.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/services.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
typedef ImportCallback = void Function( typedef ImportCallback = void Function(
@ -52,7 +51,7 @@ Future<void> showImportPanel(
); );
} }
class ImportPanel extends StatelessWidget { class ImportPanel extends StatefulWidget {
const ImportPanel({ const ImportPanel({
super.key, super.key,
required this.parentViewId, required this.parentViewId,
@ -62,40 +61,63 @@ class ImportPanel extends StatelessWidget {
final String parentViewId; final String parentViewId;
final ImportCallback importCallback; final ImportCallback importCallback;
@override
State<ImportPanel> createState() => _ImportPanelState();
}
class _ImportPanelState extends State<ImportPanel> {
final flowyContainerFocusNode = FocusNode();
@override
void dispose() {
flowyContainerFocusNode.dispose();
super.dispose();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final width = MediaQuery.of(context).size.width * 0.7; final width = MediaQuery.of(context).size.width * 0.7;
final height = width * 0.5; final height = width * 0.5;
return FlowyContainer( return KeyboardListener(
Theme.of(context).colorScheme.surface, autofocus: true,
height: height, focusNode: flowyContainerFocusNode,
width: width, onKeyEvent: (event) {
child: GridView.count( if (event is KeyDownEvent &&
childAspectRatio: 1 / .2, event.physicalKey == PhysicalKeyboardKey.escape) {
crossAxisCount: 2, FlowyOverlay.pop(context);
children: ImportType.values }
.where((element) => element.enableOnRelease) },
.map( child: FlowyContainer(
(e) => Card( Theme.of(context).colorScheme.surface,
child: FlowyButton( height: height,
leftIcon: e.icon(context), width: width,
leftIconSize: const Size.square(20), child: GridView.count(
text: FlowyText.medium( childAspectRatio: 1 / .2,
e.toString(), crossAxisCount: 2,
fontSize: 15, children: ImportType.values
overflow: TextOverflow.ellipsis, .where((element) => element.enableOnRelease)
color: Theme.of(context).colorScheme.tertiary, .map(
(e) => Card(
child: FlowyButton(
leftIcon: e.icon(context),
leftIconSize: const Size.square(20),
text: FlowyText.medium(
e.toString(),
fontSize: 15,
overflow: TextOverflow.ellipsis,
color: Theme.of(context).colorScheme.tertiary,
),
onTap: () async {
await _importFile(widget.parentViewId, e);
if (context.mounted) {
FlowyOverlay.pop(context);
}
},
), ),
onTap: () async {
await _importFile(parentViewId, e);
if (context.mounted) {
FlowyOverlay.pop(context);
}
},
), ),
), )
) .toList(),
.toList(), ),
), ),
); );
} }
@ -160,7 +182,7 @@ class ImportPanel extends StatelessWidget {
} }
} }
importCallback(importType, '', null); widget.importCallback(importType, '', null);
} }
} }