質問編集履歴

3

実施したこと追加

2022/03/08 03:02

投稿

tenshonkawaru
tenshonkawaru

スコア45

test CHANGED
File without changes
test CHANGED
@@ -122,3 +122,8 @@
122
122
  }
123
123
  }
124
124
  ```
125
+
126
+ 追記3
127
+ TextField外をタップした際にキーボードが閉じるように変更したところ、キーボードが閉じるタイミングでまたリロードが入りました。
128
+ TextFieldにカードルがあるかどうかではなく、キーボードの動作に関連しているように感じます。
129
+ また、追記2で入力がうまくできると記載しましたが、入力中は問題なくソートして表示してくれるのですが、TextField外タップでソートしていた内容が初期化されてしまったので意味はないようです。

2

実施したこと追加

2022/03/08 02:54

投稿

tenshonkawaru
tenshonkawaru

スコア45

test CHANGED
File without changes
test CHANGED
@@ -85,5 +85,40 @@
85
85
  D/InputConnectionAdaptor(30223): The input method toggled cursor monitoring on
86
86
  ```
87
87
 
88
+ 追記1
88
89
  回答をいただきましたので試してみましたがうまく動きませんでした。
89
90
  コード、ログ等を追加いたしましたので、お気づきの点がございましたら引き続きよろしくお願いいたします。
91
+
92
+ 追記2
93
+ 以下のように変更することで画面が変わることなく入力ができるようになりました。
94
+ ただ、見た目が変わらないだけでTextFieldにカーソルが入るたびにgetApiDataは通っているようなので、最初のみgetApiDataを通るようにしたいです。
95
+ ```Flutter
96
+ class _test extends State<test> {
97
+ // apiを通ったかどうかのフラグ
98
+ bool flag = true;
99
+ Future<String> getApiData() async {
100
+ // APIを使用してデータを取得している
101
+ }
102
+
103
+ // 省略
104
+
105
+ @override
106
+ Widget build(BuildContext context) {
107
+ return Scaffold(
108
+ appBar: header(),
109
+ body: FutureBuilder(
110
+ future: getApiData(),
111
+ builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
112
+
113
+ if (flag && snapshot.connectionState == ConnectionState.waiting) {
114
+ // apiを通ったらフラグを変える
115
+ flag = false;
116
+ return Text("通信中");
117
+ }
118
+ // 省略
119
+ }
120
+ )
121
+ )
122
+ }
123
+ }
124
+ ```

1

詳細の追加

2022/03/08 02:05

投稿

tenshonkawaru
tenshonkawaru

スコア45

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,26 @@
1
1
  Flutterで、TextFieldに入力された文字で検索をかけるという機能を作成しております。
2
2
  iosでは期待通りに動くのですが、Androidでは文字を入力しようとタップすると画面全体がリロードされてしまい、文字を入力することができません。
3
+
4
+ 画面が表示される
5
+ →TextFieldをタップする
6
+ →キーボードが出てくるがすぐに画面がリロードされる(通信中と表示される)
7
+ →画面が表示されると初期の状態に戻っている
8
+
3
9
  リロードしないようにしたいのですが、調べても解決できないため、お力をお借りできればと思います。
4
10
  よろしくお願いいたします。
5
11
 
6
12
  ```Flutter
13
+ // 呼び出し元
14
+ // ボタンをタップすると次の画面へ遷移するようになっています
15
+ onPressed: () {
16
+ Navigator.push(context, MaterialPageRoute(builder: (context) => const test(searchText: "searchText")));
17
+ }
18
+ ```
19
+
20
+ ```Flutter
7
21
  class test extends StatefulWidget {
8
22
  const GolfCourseSearch({Key? key, required this.searchText}) : super(key: key);
9
- final String? searchText;
23
+ final String searchText;
10
24
 
11
25
 
12
26
  @override
@@ -37,19 +51,39 @@
37
51
  @override
38
52
  Widget build(BuildContext context) {
39
53
  return Scaffold(
40
- // APIからデータを取得して画面を作成する
41
- // 省略
54
+ appBar: header(),
42
- TextField(
55
+ body: FutureBuilder(
43
- onChanged: (String searchText) {
56
+ future: getApiData(),
44
- // ここにログを置いても表示されない
45
- // リストから検索して結果部分だけ更新する
57
+ builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
46
- },
47
58
 
59
+ if (snapshot.connectionState == ConnectionState.waiting) {
60
+ return Text("通信中");
61
+ }
62
+
63
+ if (snapshot.hasData) {
64
+ // 省略
65
+ TextField(
66
+ onChanged: (String searchText) {
67
+ // ここにログを置いても表示されない
68
+ // リストから検索して結果部分だけ更新する
69
+ },
70
+
71
+ // ↓あってもなくても変わりませんでした
48
- controller: TextEditingController(text: widget.searchText),
72
+ // controller: TextEditingController(text: widget.searchText),
73
+ )
74
+ }
75
+ }
76
+ )
49
77
  )
50
- )
51
- // 省略
52
78
  }
53
79
  }
54
80
  ```
55
81
 
82
+ TextFieldにカーソルが入ったときに表示されるログです。
83
+ ```
84
+ I/AssistStructure(30223): Flattened final assist data: 456 bytes, containing 1 windows, 3 views
85
+ D/InputConnectionAdaptor(30223): The input method toggled cursor monitoring on
86
+ ```
87
+
88
+ 回答をいただきましたので試してみましたがうまく動きませんでした。
89
+ コード、ログ等を追加いたしましたので、お気づきの点がございましたら引き続きよろしくお願いいたします。