Repository: flutter
Issue: Strange/Obstructive _TextSelectionHandleOverlay GestureDetector overlay rendered on TextField build after state change.
Labels: framework,f: routes,f: gestures,has reproducible steps,P2,found in release: 2.2,found in release: 2.3,team-framework,triaged-framework

## Steps to Reproduce

When building a TextField dependant on state, with a `TextEditingController` with initial value and a `FocusNode` immediately requesting focus on build, there seems to be a weird `_TextSelectionHandleOverlay` rendered under the `MaterialApp` that overlays beyond the boundaries of the TextField and blocks GestureDectors underneath it.

```
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

InputBorder get _defaultInputBorder => UnderlineInputBorder(
      borderSide: BorderSide(color: Colors.transparent),
      borderRadius: BorderRadius.circular(10),
    );

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('TEST'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Visibility(
              visible: _counter > 2,
              child: _MyTextField(),
            ),
            OutlinedButton(
              onPressed: _incrementCounter,
              child: Text('Press me'),
            ),
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
    );
  }
}

class _MyTextField extends StatefulWidget {
  @override
  __MyTextFieldState createState() => __MyTextFieldState();
}

class __MyTextFieldState extends State<_MyTextField> {
  late final TextEditingController _textEditingController;
  late final FocusNode _focusNode;

  @override
  void initState() {
    _textEditingController = TextEditingController(text: '111');
    _focusNode = FocusNode();
    _focusNode.requestFocus();

    super.initState();
  }

  @override
  void dispose() {
    _textEditingController.dispose();
    _focusNode.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return TextField(
      focusNode: _focusNode,
      controller: _textEditingController,
      textAlign: TextAlign.center,
    );
  }
}
```

**Expected results:** 
Once the TextField is displayed, the button underneath it is still 'tappable'. 

**Actual results:** 
The text selection overlay gesture detector blocks any gesture detectors underneath it until the TextField is manipulated.

![Screen Shot 2021-06-21 at 6 19 23 pm](https://user-images.githubusercontent.com/8855763/122747117-400a4980-d2bd-11eb-8b6c-97a0d22e3bde.png)

As can be seen where the highlighted overlay GestureDetector overlaps the button below the TextField. Any taps in that area will not trigger the button.

![Screen Shot 2021-06-21 at 6 20 05 pm](https://user-images.githubusercontent.com/8855763/122747171-531d1980-d2bd-11eb-9111-55be5a3c17ed.png)

Interestingly this overlayed GestureDetector only seems to appear when the TextField is built after a state change (handled with a Visibility widget in the example above). If built straight up it behaves fine. 
Likewise if no initial `text: <value>` is provided into the TextEditingController in initState, or focus node `requestFocus()` called... also doesn't seem to make the overlay appear.

```
[✓] Flutter (Channel stable, 2.0.2, on macOS 11.2.1 20D74 darwin-x64, locale en-AU)
    • Flutter version 2.0.2 at /Users/paulpopiel/Development/flutter
    • Framework revision 8962f6dc68 (3 months ago), 2021-03-11 13:22:20 -0800
    • Engine revision 5d8bf811b3
    • Dart version 2.12.1

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0-rc4)
    • Android SDK at /Users/paulpopiel/Library/Android/sdk
    • Platform android-30, build-tools 31.0.0-rc4
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.4, Build version 12D4e
    • CocoaPods version 1.10.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)

[✓] VS Code (version 1.57.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.23.0

[✓] Connected device (2 available)
    • iPhone 12 (mobile) • C00A3998-9397-4608-86A9-9BA2868D60D4 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-4 (simulator)
    • Chrome (web)       • chrome                               • web-javascript • Google Chrome 91.0.4472.114
```

Have also had a colleague test this on the latest Flutter 2.2 version, with the same results.

</details>