Flutter: ツリー全体からキーボードフォーカスを削除する機能

作成日 2018年02月01日  ·  1コメント  ·  ソース: flutter/flutter

再現する手順

ユーザーが別の場所に触れるまで、textFieldのhintTextを表示したいと思います。
タッチポイントはウィジェットツリーの奥深くにある可能性があり、ウィジェットツリーのどこかで現在フォーカスされているノードを取得して非フォーカスを呼び出し、textFieldを非アクティブにしてキーボードを非表示にする方法がわかりません。 これは、フラッターや、例がなく、パターンの使用方法を説明していないドキュメントについての私の理解の問題である可能性があります。

コード例は、ノードでunfocusを呼び出しているGestureDetectorを示しています。 同じウィジェットでfocusNodeに簡単にアクセスできるため、これはここでは簡単です。 ここでの問題は、ネストされたウィジェットツリーで同じことを行う方法です。 そうするための推奨パターンは何ですか?

  <strong i="9">@override</strong>
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text(widget.title),
        ),
        body: new Stack(children: <Widget>[
          new GestureDetector(
              excludeFromSemantics: true,
              onTapDown: (_) {
                _focusNode.unfocus();
              }),
          new Column(children: <Widget>[
            new TextField(
                focusNode: _focusNode,
                decoration: new InputDecoration(
                    border: null,
                    hintText: _focusNode.hasFocus ? 'FOCUS' : 'no focus')),
            new RaisedButton(
                child: new Text('Remove Focus'),
                onPressed: () => _focusNode.unfocus())
          ])
        ]));
  }

  final FocusNode _focusNode = new FocusNode();

  <strong i="10">@override</strong>
  void initState() {
    super.initState();
    _focusNode.addListener(() {
      setState(() {});
      print('Has focus: $_focusNode.hasFocus');
    });
  }

フラッタードクター

[√] Flutter (on Microsoft Windows [Version 10.0.16299.192], locale en-US, channel dev)
    • Flutter version 0.0.21 at c:\sdks\flutter
    • Framework revision 2e449f06f0 (2 days ago), 2018-01-29 14:26:51 -0800
    • Engine revision 6921873c71
    • Tools Dart version 2.0.0-dev.16.0
    • Engine Dart version 2.0.0-edge.da1f52592ef73fe3afa485385cb995b9aec0181a

[√] Android toolchain - develop for Android devices (Android SDK 27.0.2)
    • Android SDK at C:\Users\ride4\AppData\Local\Android\sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-27, build-tools 27.0.2
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)

[√] Android Studio (version 3.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)

[√] IntelliJ IDEA Community Edition (version 2017.2)
    • Flutter plugin version 19.1
    • Dart plugin version 172.4343.25

[√] Connected devices
    • Android SDK built for x86 • emulator-5554 • android-x86 • Android 7.1.1 (API 25) (emulator)
look material design framework new feature

最も参考になるコメント

私はこれが要約すると思います

FocusScope.of(context).requestFocus(new FocusNode());

#7247の複製として閉じる
おそらくまた#20227

>すべてのコメント

私はこれが要約すると思います

FocusScope.of(context).requestFocus(new FocusNode());

#7247の複製として閉じる
おそらくまた#20227

このページは役に立ちましたか?
0 / 5 - 0 評価