回答編集履歴

1

Autocompleteを改良する場合の実装例を追加

2022/09/29 23:24

投稿

ta.fu
ta.fu

スコア1683

test CHANGED
@@ -5,3 +5,40 @@
5
5
  ```Autocomplete```を改良するか```RawAutocomplete```を使って自作するかどちらか。
6
6
 
7
7
  速いのは```Autocomplete```をコピーして上位側から```TextEditingController```を渡せるようにして、```build```内の```RawAutocomplete```に用意した```TextEditingController```を渡すようにするという感じだろうか。
8
+
9
+ ---
10
+ ```Autocomplete```を改良した場合の実装を以下抜粋して追記しておきます。
11
+ ```dart
12
+ class Autocomplete<T extends Object> extends StatelessWidget {
13
+ /// Creates an instance of [Autocomplete].
14
+ Autocomplete(
15
+ this.controller, // 追加
16
+ {
17
+ super.key,
18
+ required this.optionsBuilder,
19
+ this.displayStringForOption = RawAutocomplete.defaultStringForOption,
20
+ this.fieldViewBuilder = _defaultFieldViewBuilder,
21
+ this.onSelected,
22
+ this.optionsMaxHeight = 200.0,
23
+ this.optionsViewBuilder,
24
+ this.initialValue,
25
+ }) : assert(displayStringForOption != null),
26
+ assert(optionsBuilder != null);
27
+
28
+ /// {@macro flutter.widgets.RawAutocomplete.displayStringForOption}
29
+ final AutocompleteOptionToString<T> displayStringForOption;
30
+
31
+ final TextEditingController controller; // 追加
32
+ final FocusNode _focusNode = FocusNode(); // 追加
33
+ final GlobalKey _autocompleteKey = GlobalKey(); // 追加
34
+
35
+ ~中略~
36
+
37
+ @override
38
+ Widget build(BuildContext context) {
39
+ return RawAutocomplete<T>(
40
+ textEditingController: controller, // 追加
41
+ focusNode: _focusNode, // 追加
42
+ key: _autocompleteKey, // 追加
43
+ displayStringForOption: displayStringForOption,
44
+ ```