Skip to content

Commit

Permalink
fix: keep keyboard appearance as same brightness as system theme (#264)
Browse files Browse the repository at this point in the history
  • Loading branch information
hyj1204 committed Jul 3, 2023
1 parent 2688efb commit 8bfb37f
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 58 deletions.
5 changes: 1 addition & 4 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,7 @@ class MyApp extends StatelessWidget {
supportedLocales: const [Locale('en', 'US')],
debugShowCheckedModeBanner: false,
home: const MyHomePage(title: 'AppFlowyEditor Example'),
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
theme: ThemeData.light(useMaterial3: true),
);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ export 'delta_input_on_delete_impl.dart';
export 'delta_input_on_insert_impl.dart';
export 'delta_input_on_non_text_update_impl.dart';
export 'delta_input_on_replace_impl.dart';
export 'non_delta_input_service.dart';
export 'text_input_service.dart';
Original file line number Diff line number Diff line change
@@ -1,45 +1,9 @@
import 'dart:math';

import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:appflowy_editor/src/editor/editor_component/service/ime/text_input_service.dart';
import 'package:flutter/services.dart';

abstract class TextInputService {
TextInputService({
required this.onInsert,
required this.onDelete,
required this.onReplace,
required this.onNonTextUpdate,
required this.onPerformAction,
});

Future<void> Function(TextEditingDeltaInsertion insertion) onInsert;
Future<void> Function(TextEditingDeltaDeletion deletion) onDelete;
Future<void> Function(TextEditingDeltaReplacement replacement) onReplace;
Future<void> Function(TextEditingDeltaNonTextUpdate nonTextUpdate)
onNonTextUpdate;
Future<void> Function(TextInputAction action) onPerformAction;

TextRange? get composingTextRange;
bool get attached;

void updateCaretPosition(Size size, Matrix4 transform, Rect rect);

/// Updates the [TextEditingValue] of the text currently being edited.
///
/// Note that if there are IME-related requirements,
/// please config `composing` value within [TextEditingValue]
void attach(TextEditingValue textEditingValue);

/// Applies insertion, deletion and replacement
/// to the text currently being edited.
///
/// For more information, please check [TextEditingDelta].
Future<void> apply(List<TextEditingDelta> deltas);

/// Closes the editing state of the text currently being edited.
void close();
}

class DeltaTextInputService extends TextInputService with DeltaTextInputClient {
DeltaTextInputService({
required super.onInsert,
Expand Down Expand Up @@ -82,17 +46,22 @@ class DeltaTextInputService extends TextInputService with DeltaTextInputClient {
}

@override
void attach(TextEditingValue textEditingValue) {
void attach(
TextEditingValue textEditingValue,
TextInputConfiguration configuration,
) {
if (_textInputConnection == null ||
_textInputConnection!.attached == false) {
_textInputConnection = TextInput.attach(
this,
const TextInputConfiguration(
enableDeltaModel: true,
inputType: TextInputType.multiline,
textCapitalization: TextCapitalization.sentences,
inputAction: TextInputAction.newline,
),
configuration,
// TextInputConfiguration(
// enableDeltaModel: true,
// inputType: TextInputType.multiline,
// textCapitalization: TextCapitalization.sentences,
// inputAction: TextInputAction.newline,
// keyboardAppearance: Theme.of(context).brightness,
// ),
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:math';

import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:appflowy_editor/src/editor/editor_component/service/ime/text_diff.dart';
import 'package:appflowy_editor/src/editor/editor_component/service/ime/text_input_service.dart';
import 'package:flutter/services.dart';

class NonDeltaTextInputService extends TextInputService with TextInputClient {
Expand Down Expand Up @@ -54,7 +55,10 @@ class NonDeltaTextInputService extends TextInputService with TextInputClient {
}

@override
void attach(TextEditingValue textEditingValue) {
void attach(
TextEditingValue textEditingValue,
TextInputConfiguration configuration,
) {
final formattedValue = textEditingValue.format();
if (currentTextEditingValue == formattedValue) {
return;
Expand All @@ -64,12 +68,14 @@ class NonDeltaTextInputService extends TextInputService with TextInputClient {
_textInputConnection!.attached == false) {
_textInputConnection = TextInput.attach(
this,
const TextInputConfiguration(
enableDeltaModel: false,
inputType: TextInputType.multiline,
textCapitalization: TextCapitalization.sentences,
inputAction: TextInputAction.newline,
),
configuration,
// TextInputConfiguration(
// enableDeltaModel: false,
// inputType: TextInputType.multiline,
// textCapitalization: TextCapitalization.sentences,
// inputAction: TextInputAction.newline,
// keyboardAppearance: Theme.of(context).brightness,
// ),
);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

abstract class TextInputService {
TextInputService({
required this.onInsert,
required this.onDelete,
required this.onReplace,
required this.onNonTextUpdate,
required this.onPerformAction,
});

Future<void> Function(TextEditingDeltaInsertion insertion) onInsert;
Future<void> Function(TextEditingDeltaDeletion deletion) onDelete;
Future<void> Function(TextEditingDeltaReplacement replacement) onReplace;
Future<void> Function(TextEditingDeltaNonTextUpdate nonTextUpdate)
onNonTextUpdate;
Future<void> Function(TextInputAction action) onPerformAction;

TextRange? get composingTextRange;
bool get attached;

void updateCaretPosition(Size size, Matrix4 transform, Rect rect);

/// Updates the [TextEditingValue] of the text currently being edited.
///
/// Note that if there are IME-related requirements,
/// please config `composing` value within [TextEditingValue]
///
/// [BuildContext] is used to get current keyboard appearance(light or dark)
void attach(
TextEditingValue textEditingValue,
TextInputConfiguration configuration,
);

/// Applies insertion, deletion and replacement
/// to the text currently being edited.
///
/// For more information, please check [TextEditingDelta].
Future<void> apply(List<TextEditingDelta> deltas);

/// Closes the editing state of the text currently being edited.
void close();
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:appflowy_editor/src/editor/editor_component/service/ime/non_delta_input_service.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
Expand Down Expand Up @@ -198,7 +197,16 @@ class KeyboardServiceWidgetState extends State<KeyboardServiceWidget>
void _attachTextInputService(Selection selection) {
final textEditingValue = _getCurrentTextEditingValue(selection);
if (textEditingValue != null) {
textInputService.attach(textEditingValue);
textInputService.attach(
textEditingValue,
TextInputConfiguration(
enableDeltaModel: false,
inputType: TextInputType.multiline,
textCapitalization: TextCapitalization.sentences,
inputAction: TextInputAction.newline,
keyboardAppearance: Theme.of(context).brightness,
),
);
// disable shortcuts when the IME active
enableShortcuts = textEditingValue.composing == TextRange.empty;
} else {
Expand Down
3 changes: 2 additions & 1 deletion test/new/infra/testable_editor.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:appflowy_editor/appflowy_editor.dart';
import 'package:appflowy_editor/src/editor/editor_component/service/ime/text_input_service.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
Expand Down Expand Up @@ -81,7 +82,7 @@ class TestableEditor {
home: Scaffold(
body: wrapper == null
? editor
: wrapper!(
: wrapper(
editor,
),
),
Expand Down

0 comments on commit 8bfb37f

Please sign in to comment.