Flutter: Kemampuan untuk menghapus fokus keyboard dari seluruh pohon

Dibuat pada 1 Feb 2018  ·  1Komentar  ·  Sumber: flutter/flutter

Langkah-langkah untuk Reproduksi

Saya ingin menunjukkan hintText dari textField sampai pengguna menyentuh di tempat lain.
Titik sentuh bisa berada jauh di dalam pohon widget dan saya tidak tahu bagaimana cara mendapatkan simpul fokus saat ini di suatu tempat di pohon widget untuk memanggil tidak fokus, untuk menunjukkan textField tidak aktif dan menyembunyikan keyboard. Ini mungkin hanya masalah dengan pemahaman saya tentang flutter atau dokumentasi yang tidak memiliki contoh dan tidak menjelaskan cara menggunakan polanya.

Contoh kode menunjukkan GestureDetector yang memanggil unfocus pada node. Ini sederhana di sini karena focusNode mudah diakses di widget yang sama. Pertanyaannya di sini adalah bagaimana melakukan hal yang sama di pohon widget bersarang. Apa pola yang disarankan untuk melakukannya?

  <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');
    });
  }

Dokter Flutter

[√] 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

Komentar yang paling membantu

Saya pikir ini bermuara pada

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

Penutupan sebagai duplikat #7247
mungkin juga #20227

>Semua komentar

Saya pikir ini bermuara pada

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

Penutupan sebagai duplikat #7247
mungkin juga #20227

Apakah halaman ini membantu?
0 / 5 - 0 peringkat