<h2 dir="auto">Steps to Reproduce</h2>
<p dir="auto">I would like to show the hintText of a textField until the user touches somewhere else.<br>
The touchpoint could be deep in the widget tree and I dont know how to obtain the current focused node  somewhere in the widget tree to call unfocused, to show the textField inactive and hide the keyboard. This might be just an issue with my understanding of flutter or the documentation which lacks example and does not explain how to use the patterns.</p>
<p dir="auto">The code example shows the GestureDetector which is calling unfocus on the node. This is simple here because the focusNode  is easily accessible in the same widget. The question here is how to do the same in a nested widget tree. What is the recommended pattern to do so?</p>
<div class="highlight highlight-source-dart notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text(widget.title),
        ),
        body: new Stack(children: &lt;Widget&gt;[
          new GestureDetector(
              excludeFromSemantics: true,
              onTapDown: (_) {
                _focusNode.unfocus();
              }),
          new Column(children: &lt;Widget&gt;[
            new TextField(
                focusNode: _focusNode,
                decoration: new InputDecoration(
                    border: null,
                    hintText: _focusNode.hasFocus ? 'FOCUS' : 'no focus')),
            new RaisedButton(
                child: new Text('Remove Focus'),
                onPressed: () =&gt; _focusNode.unfocus())
          ])
        ]));
  }

  final FocusNode _focusNode = new FocusNode();

  @override
  void initState() {
    super.initState();
    _focusNode.addListener(() {
      setState(() {});
      print('Has focus: $_focusNode.hasFocus');
    });
  }"><pre class="notranslate">  <span class="pl-k">@override</span>
  <span class="pl-c1">Widget</span> <span class="pl-en">build</span>(<span class="pl-c1">BuildContext</span> context) {
    <span class="pl-k">return</span> <span class="pl-k">new</span> <span class="pl-c1">Scaffold</span>(
        appBar<span class="pl-k">:</span> <span class="pl-k">new</span> <span class="pl-c1">AppBar</span>(
          title<span class="pl-k">:</span> <span class="pl-k">new</span> <span class="pl-c1">Text</span>(widget.title),
        ),
        body<span class="pl-k">:</span> <span class="pl-k">new</span> <span class="pl-c1">Stack</span>(children<span class="pl-k">:</span> <span class="pl-k">&lt;</span><span class="pl-c1">Widget</span><span class="pl-k">&gt;</span>[
          <span class="pl-k">new</span> <span class="pl-c1">GestureDetector</span>(
              excludeFromSemantics<span class="pl-k">:</span> <span class="pl-c1">true</span>,
              onTapDown<span class="pl-k">:</span> (_) {
                _focusNode.<span class="pl-en">unfocus</span>();
              }),
          <span class="pl-k">new</span> <span class="pl-c1">Column</span>(children<span class="pl-k">:</span> <span class="pl-k">&lt;</span><span class="pl-c1">Widget</span><span class="pl-k">&gt;</span>[
            <span class="pl-k">new</span> <span class="pl-c1">TextField</span>(
                focusNode<span class="pl-k">:</span> _focusNode,
                decoration<span class="pl-k">:</span> <span class="pl-k">new</span> <span class="pl-c1">InputDecoration</span>(
                    border<span class="pl-k">:</span> <span class="pl-c1">null</span>,
                    hintText<span class="pl-k">:</span> _focusNode.hasFocus <span class="pl-k">?</span> <span class="pl-s">'FOCUS'</span> <span class="pl-k">:</span> <span class="pl-s">'no focus'</span>)),
            <span class="pl-k">new</span> <span class="pl-c1">RaisedButton</span>(
                child<span class="pl-k">:</span> <span class="pl-k">new</span> <span class="pl-c1">Text</span>(<span class="pl-s">'Remove Focus'</span>),
                onPressed<span class="pl-k">:</span> () <span class="pl-k">=&gt;</span> _focusNode.<span class="pl-en">unfocus</span>())
          ])
        ]));
  }

  <span class="pl-k">final</span> <span class="pl-c1">FocusNode</span> _focusNode <span class="pl-k">=</span> <span class="pl-k">new</span> <span class="pl-c1">FocusNode</span>();

  <span class="pl-k">@override</span>
  <span class="pl-k">void</span> <span class="pl-en">initState</span>() {
    <span class="pl-c1">super</span>.<span class="pl-en">initState</span>();
    _focusNode.<span class="pl-en">addListener</span>(() {
      <span class="pl-en">setState</span>(() {});
      <span class="pl-en">print</span>(<span class="pl-s">'Has focus: $<span class="pl-v">_focusNode</span>.hasFocus'</span>);
    });
  }</pre></div>
<h2 dir="auto">Flutter Doctor</h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="[√] 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)"><pre class="notranslate"><code class="notranslate">[√] 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)
</code></pre></div>
<p dir="auto">It's not clear how to accomplish this.</p>