質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

解決済

FlutterのTextFieldをタップするとリロードされる

tenshonkawaru
tenshonkawaru

総合スコア45

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1回答

0評価

0クリップ

558閲覧

投稿2022/03/07 09:29

編集2022/03/08 18:16

Flutterで、TextFieldに入力された文字で検索をかけるという機能を作成しております。
iosでは期待通りに動くのですが、Androidでは文字を入力しようとタップすると画面全体がリロードされてしまい、文字を入力することができません。

画面が表示される
→TextFieldをタップする
→キーボードが出てくるがすぐに画面がリロードされる(通信中と表示される)
→画面が表示されると初期の状態に戻っている

リロードしないようにしたいのですが、調べても解決できないため、お力をお借りできればと思います。
よろしくお願いいたします。

Flutter

// 呼び出し元 // ボタンをタップすると次の画面へ遷移するようになっています onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) => const test(searchText: "searchText"))); }

Flutter

class test extends StatefulWidget { const GolfCourseSearch({Key? key, required this.searchText}) : super(key: key); final String searchText; @override _test createState() => _test(); } class _test extends State<test> { Future<String> getApiData() async { // APIを使用してデータを取得している } late BehaviorSubject<int> _events; @override void initState() { super.initState(); _events = BehaviorSubject<int>(); _events.add(0); } @override void dispose() { _events.close(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: header(), body: FutureBuilder( future: getApiData(), builder: (BuildContext context, AsyncSnapshot<String> snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Text("通信中"); } if (snapshot.hasData) { // 省略 TextField( onChanged: (String searchText) { // ここにログを置いても表示されない // リストから検索して結果部分だけ更新する }, // ↓あってもなくても変わりませんでした // controller: TextEditingController(text: widget.searchText), ) } } ) ) } }

TextFieldにカーソルが入ったときに表示されるログです。

I/AssistStructure(30223): Flattened final assist data: 456 bytes, containing 1 windows, 3 views D/InputConnectionAdaptor(30223): The input method toggled cursor monitoring on

追記1
回答をいただきましたので試してみましたがうまく動きませんでした。
コード、ログ等を追加いたしましたので、お気づきの点がございましたら引き続きよろしくお願いいたします。

追記2
以下のように変更することで画面が変わることなく入力ができるようになりました。
ただ、見た目が変わらないだけでTextFieldにカーソルが入るたびにgetApiDataは通っているようなので、最初のみgetApiDataを通るようにしたいです。

Flutter

class _test extends State<test> { // apiを通ったかどうかのフラグ bool flag = true; Future<String> getApiData() async { // APIを使用してデータを取得している } // 省略 @override Widget build(BuildContext context) { return Scaffold( appBar: header(), body: FutureBuilder( future: getApiData(), builder: (BuildContext context, AsyncSnapshot<String> snapshot) { if (flag && snapshot.connectionState == ConnectionState.waiting) { // apiを通ったらフラグを変える flag = false; return Text("通信中"); } // 省略 } ) ) } }

追記3
TextField外をタップした際にキーボードが閉じるように変更したところ、キーボードが閉じるタイミングでまたリロードが入りました。
TextFieldにカードルがあるかどうかではなく、キーボードの動作に関連しているように感じます。
また、追記2で入力がうまくできると記載しましたが、入力中は問題なくソートして表示してくれるのですが、TextField外タップでソートしていた内容が初期化されてしまったので意味はないようです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。