質問編集履歴
3
実施したこと追加
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
実施したこと追加
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
詳細の追加
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
|
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
|
-
|
55
|
+
body: FutureBuilder(
|
43
|
-
|
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
|
+
コード、ログ等を追加いたしましたので、お気づきの点がございましたら引き続きよろしくお願いいたします。
|