Repository: flutter
Issue: Navigator widget shows leftover content from previous route when navigating to a new route 
Labels: framework,f: routes,has reproducible steps,P2,found in release: 3.3,found in release: 3.7,team-framework,triaged-framework

## The problem

I am using a `Navigator` widget to navigate between all the different routes that I have inside my app. This works quite well but the weird behavior I am experiencing is that when navigating to the new page, there's a slight amount of time where the screen shows some leftover contents from the previous screen on top of the new screen and this looks very odd to me.

Here's a slow-mo GIF explaining what I mean: 

![GIF](https://user-images.githubusercontent.com/41455764/103891647-83477600-50ea-11eb-8ff6-2bd185c9db5f.gif)


I tried different approaches to solve this problem like executing transition animations on the routes and using different navigator widgets for each screen but none of those really worked. 

It also seems to me that this bug is only related to the `Navigator` widget because when I use the route navigation of the `MaterialApp` widget I cannot reproduce this behavior.

## Steps to Reproduce

1. Create a flutter app with multiple screens (routes).
2. Give your `MaterialApp` a home property as one of those screens.
3. In the home screen of your app, create a `Scaffold` that has a `NavigationRail` with multiple destinations, and a `Navigator` to render the rest of the contents on your screen.
4. Try navigating between the different destinations in your app.
 Here's the code I'm using to build the main page: 


<details>
<summary>code sample</summary>

```dart
@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: SkpAppBar(
        title: _title,
      ),
      body: Stack(
        alignment: Alignment.centerLeft,
        clipBehavior: Clip.none,
        children: [
          Row(
            children: [
              if (_showNavigationRail(context)) AnimatedContainer(duration: Duration(milliseconds: 200), width: expanded ? 200 : 56),
              Expanded(
                child: Navigator(
                  key: navigatorKey,
                  onGenerateRoute: generateRoute,
                  initialRoute: '/login',
                ),
              ),
            ],
          ),
          if (_showNavigationRail(context))
            AnimatedContainer(
              duration: Duration(milliseconds: 200),
              width: expanded ? 200 : 56,
              child: Material(
                elevation: 20,
                color: SkpColors.lightGreyF7,
                child: SkpNavigationRail(
                  extended: expanded,
                  onExtendedToggled: () => setState(() => expanded = !expanded),
                  onDestionationSelected: (String newRoute) {
                    if (ModalRoute.of(context).settings.name != newRoute) {
                      navigatorKey.currentState.pushNamedAndRemoveUntil(newRoute, ModalRoute.withName('/'));
                    }
                  },
                ),
              ),
            ),
        ],
      ),
      resizeToAvoidBottomInset: true,
      drawer: _showNavigationRail(context) ? null : SkpDrawer(),
    );
  }
```
</details>



**Expected results:** Should navigate between screens without any flickering nor previous route leftover content.

**Actual results:** A weird flickering is happening which makes the app render some content from the previous screen.

<details>
  <summary>Logs</summary>

Flutter doctor output: 

```
[✓] Flutter (Channel dev, 1.26.0-1.0.pre, on macOS 11.1 20C69 darwin-x64, locale en-GB)
    • Flutter version 1.26.0-1.0.pre at /Users/moazelshebly/flutter
    • Framework revision 63062a6443 (4 weeks ago), 2020-12-13 23:19:13 +0800
    • Engine revision 4797b06652
    • Dart version 2.12.0 (build 2.12.0-141.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
    • Android SDK at /Users/moazelshebly/Library/Android/sdk
    • Platform android-29, build-tools 29.0.2
    • 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 12.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.3, Build version 12C33
    • CocoaPods version 1.10.0

[✓] 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.52.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.17.0

[✓] Connected device (2 available)
    • macOS (desktop) • macos  • darwin-x64     • macOS 11.1 20C69 darwin-x64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 87.0.4280.88

• No issues found!
```
</details>