title: navigation transition hangs during Future
body: <p>i have the below code , that when the button is pressed on Page1() , the future is executed when Page2() loads, but the CircularProgressIndicator() "freezes", until the future completes.  I have tried this with BottomNavigationBar as well, and the "slide-in" freezes half way there as well.</p>
  
  <p>is there a more idiomatic way to do this so that Page2() renders fully while the future is running ? </p>
  
  <pre><code>//-----------------------
      //main.dart
      //-----------------------
  
      void main() =&gt; runApp(new MyApp());
  
  class MyApp extends StatelessWidget {
    // This widget is the root of your application.
    @override
    Widget build(BuildContext context) {
      return new MaterialApp(
        routes: {
          '/' : (BuildContext context) =&gt; Page1(),
          '/page2' : (BuildContext context) =&gt; Page2()
        }
      );
    }
  }
  
  //-----------------------
  //page1.dart
  //-----------------------
  
  class Page1 extends StatelessWidget {
  
    @override
      Widget build(BuildContext context) {
         return Scaffold(
           appBar: AppBar(title: Text('Page 1')),
           body: Container(
             child: Column(children: &lt;Widget&gt;[
               Text('Page 1 header'),
               RaisedButton(
                 child: Text('Click me'),
                 onPressed: ()  {
                   Navigator.of(context).pushReplacementNamed('/page2');
                   })
             ],),)
           );
      }
  }
  
  //-----------------------
  //page2.dart
  //-----------------------
  
  class Page2 extends StatefulWidget {
    @override
    State&lt;StatefulWidget&gt; createState() {
      return _Page2State();
    }
  }
  
  class _Page2State extends State&lt;Page2&gt; {
    MainModel model = MainModel();
  
    void initState() {
      model.fetchData();
      super.initState();
    }
  
    @override
    Widget build(BuildContext context) {
      return Scaffold(
          appBar: AppBar(title: Text('Page 2')),
          body: ScopedModel&lt;MainModel&gt;(
              model: model,
              child: ScopedModelDescendant(
                  builder: (context, child, MainModel model) {
                if (model.isLoading) {
                  return Center(child: CircularProgressIndicator());
                } else {
                  return Container(
                      child: Column(
                    children: &lt;Widget&gt;[
                      Text('Page 2 body'),
                    ],
                  ));
                }
              })));
    }
  }
  
  
  //-----------------------
  //main_model.dart
  //-----------------------
  class MainModel extends Model {
  
      bool _isLoading = false;
      bool get isLoading =&gt; _isLoading;
  
    void fetchData() async {
  
        _isLoading = true;
        notifyListeners();
  
        final String url = 'https://jsonplaceholder.typicode.com/todos/1';
  
        await http.get(url)
            .then&lt;Null&gt;((http.Response response) {
              print('${DateTime.now()} In http response and about to sleep');
              sleep(const Duration(seconds:5));
              print('${DateTime.now()} done sleeping');
  
              _isLoading = false;
              notifyListeners();
              return;
            }
        ).catchError((error) {
          print('Error: $error');
          _isLoading = false;
          notifyListeners();
          return;
        });
  
    }
  
  }
  </code></pre>