Flutter: Possibilité de supprimer le focus clavier de l'ensemble de l'arborescence

Créé le 1 févr. 2018  ·  1Commentaire  ·  Source: flutter/flutter

Étapes pour reproduire

Je voudrais afficher le hintText d'un textField jusqu'à ce que l'utilisateur touche ailleurs.
Le point de contact peut être situé profondément dans l'arborescence des widgets et je ne sais pas comment obtenir le nœud focalisé actuel quelque part dans l'arborescence des widgets pour appeler non focalisé, afficher le textField inactif et masquer le clavier. Cela peut être juste un problème avec ma compréhension du flutter ou de la documentation qui manque d'exemple et n'explique pas comment utiliser les modèles.

L'exemple de code montre le GestureDetector qui appelle unfocus sur le nœud. C'est simple ici car le focusNode est facilement accessible dans le même widget. La question ici est de savoir comment faire la même chose dans une arborescence de widgets imbriqués. Quel est le modèle recommandé pour le faire?

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

Docteur 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

Commentaire le plus utile

Je pense que cela se résume à

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

Fermeture en double du #7247
peut-être aussi #20227

>Tous les commentaires

Je pense que cela se résume à

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

Fermeture en double du #7247
peut-être aussi #20227

Cette page vous a été utile?
0 / 5 - 0 notes