fix: focus is clickable if text field is being edited (#3020)

This commit is contained in:
Alex Wallen 2023-07-18 03:25:25 -07:00 committed by GitHub
parent f6edd4b32b
commit 06bbc06fff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 0 deletions

View File

@ -0,0 +1,45 @@
import 'package:appflowy/workspace/application/settings/prelude.dart';
import 'package:appflowy/workspace/presentation/settings/widgets/settings_appearance_view.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'util/util.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
group('appearance settings tests', () {
testWidgets('after editing text field, button should be able to be clicked',
(tester) async {
await tester.initializeAppFlowy();
await tester.tapGoButton();
tester.expectToSeeHomePage();
await tester.openSettings();
await tester.openSettingsPage(SettingsPage.appearance);
final dropDown = find.byKey(ThemeFontFamilySetting.popoverKey);
await tester.tap(dropDown);
await tester.pumpAndSettle();
final textField = find.byKey(ThemeFontFamilySetting.textFieldKey);
await tester.tap(textField);
await tester.pumpAndSettle();
await tester.enterText(textField, 'Abel');
await tester.pumpAndSettle();
final fontFamilyButton = find.byKey(const Key('Abel'));
expect(fontFamilyButton, findsOneWidget);
await tester.tap(fontFamilyButton);
await tester.pumpAndSettle();
// just switch the page and verify that the font family was set after that
await tester.openSettingsPage(SettingsPage.files);
await tester.openSettingsPage(SettingsPage.appearance);
expect(find.textContaining('Abel'), findsOneWidget);
});
});
}

View File

@ -286,6 +286,8 @@ class ThemeFontFamilySetting extends StatefulWidget {
}); });
final String currentFontFamily; final String currentFontFamily;
static Key textFieldKey = const Key('FontFamilyTextField');
static Key popoverKey = const Key('FontFamilyPopover');
@override @override
State<ThemeFontFamilySetting> createState() => _ThemeFontFamilySettingState(); State<ThemeFontFamilySetting> createState() => _ThemeFontFamilySettingState();
@ -298,6 +300,7 @@ class _ThemeFontFamilySettingState extends State<ThemeFontFamilySetting> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ThemeSettingDropDown( return ThemeSettingDropDown(
popoverKey: ThemeFontFamilySetting.popoverKey,
label: LocaleKeys.settings_appearance_fontFamily_label.tr(), label: LocaleKeys.settings_appearance_fontFamily_label.tr(),
currentValue: parseFontFamilyName(widget.currentFontFamily), currentValue: parseFontFamilyName(widget.currentFontFamily),
onClose: () { onClose: () {
@ -310,6 +313,7 @@ class _ThemeFontFamilySettingState extends State<ThemeFontFamilySetting> {
padding: const EdgeInsets.only(right: 8), padding: const EdgeInsets.only(right: 8),
sliver: SliverToBoxAdapter( sliver: SliverToBoxAdapter(
child: FlowyTextField( child: FlowyTextField(
key: ThemeFontFamilySetting.textFieldKey,
hintText: LocaleKeys.settings_appearance_fontFamily_search.tr(), hintText: LocaleKeys.settings_appearance_fontFamily_search.tr(),
autoFocus: false, autoFocus: false,
debounceDuration: const Duration(milliseconds: 300), debounceDuration: const Duration(milliseconds: 300),
@ -364,6 +368,8 @@ class _ThemeFontFamilySettingState extends State<ThemeFontFamilySetting> {
key: UniqueKey(), key: UniqueKey(),
height: 32, height: 32,
child: FlowyButton( child: FlowyButton(
key: Key(buttonFontFamily),
onHover: (_) => FocusScope.of(context).unfocus(),
text: FlowyText.medium( text: FlowyText.medium(
parseFontFamilyName(style.fontFamily!), parseFontFamilyName(style.fontFamily!),
fontFamily: style.fontFamily!, fontFamily: style.fontFamily!,
@ -394,11 +400,13 @@ class ThemeSettingDropDown extends StatefulWidget {
required this.label, required this.label,
required this.currentValue, required this.currentValue,
required this.popupBuilder, required this.popupBuilder,
this.popoverKey,
this.onClose, this.onClose,
}); });
final String label; final String label;
final String currentValue; final String currentValue;
final Key? popoverKey;
final Widget Function(BuildContext) popupBuilder; final Widget Function(BuildContext) popupBuilder;
final void Function()? onClose; final void Function()? onClose;
@ -418,6 +426,7 @@ class _ThemeSettingDropDownState extends State<ThemeSettingDropDown> {
), ),
), ),
AppFlowyPopover( AppFlowyPopover(
key: widget.popoverKey,
direction: PopoverDirection.bottomWithRightAligned, direction: PopoverDirection.bottomWithRightAligned,
popupBuilder: widget.popupBuilder, popupBuilder: widget.popupBuilder,
constraints: const BoxConstraints( constraints: const BoxConstraints(