Flutter: Posibilidad de eliminar el foco del teclado de todo el árbol

Creado en 1 feb. 2018  ·  1Comentario  ·  Fuente: flutter/flutter

Pasos para reproducir

Me gustaría mostrar el hintText de un textField hasta que el usuario toque en otro lugar.
El punto de contacto podría estar en lo más profundo del árbol de widgets y no sé cómo obtener el nodo enfocado actual en algún lugar del árbol de widgets para llamar desenfocado, para mostrar el campo de texto inactivo y ocultar el teclado. Esto podría ser solo un problema con mi comprensión de flutter o la documentación que carece de ejemplo y no explica cómo usar los patrones.

El ejemplo de código muestra el GestureDetector que llama a un desenfoque en el nodo. Esto es simple aquí porque el focusNode es fácilmente accesible en el mismo widget. La pregunta aquí es cómo hacer lo mismo en un árbol de widgets anidado. ¿Cuál es el patrón recomendado para hacerlo?

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

Doctor Aleteo

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

Comentario más útil

Creo que esto se reduce a

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

Cerrando como duplicado de # 7247
quizás también # 20227

>Todos los comentarios

Creo que esto se reduce a

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

Cerrando como duplicado de # 7247
quizás también # 20227

¿Fue útil esta página
0 / 5 - 0 calificaciones