title: How to prevent passing down BuildContext?
body: <p>Currently I get the <code>BuildContext</code> from the <code>build</code> method in <code>HomeScreen</code>, and then I have to pass it down to <code>_gridSliver</code> then down to <code>_storeCard</code>. </p>
  
  <p>How can I write the code so that I don't need to pass the context down?</p>
  
  <p>Maybe I can create a new private <code>StatelessWidget</code> called <code>_StoreCard</code> that will have its own <code>build</code> method and thus its own <code>BuildContext</code>?</p>
  
  <pre><code>class HomeScreen extends StatelessWidget {
    HomeScreen({Key key}) : super(key: key);
  
    @override
    Widget build(BuildContext context) {
      return StoreConnector&lt;AppState, List&lt;MyStore.Store&gt;&gt;(
          converter: (Store&lt;AppState&gt; store) =&gt; store.state.home.stores,
          builder: (BuildContext context, List&lt;MyStore.Store&gt; stores) =&gt;
              CustomScrollView(slivers: &lt;Widget&gt;[_gridSliver(stores, context)]));
    }
  
    Widget _gridSliver(stores, context) {
      return SliverGrid(            
          delegate: SliverChildListDelegate(List&lt;Widget&gt;.from(stores.map(_storeCard, context))));
    }
  
    Widget _storeCard(MyStore.Store store, BuildContext context) {
      return InkWell(
        onTap: () {
          Navigator.push(
            context,
            MaterialPageRoute(builder: (_) =&gt; StoreScreen(storeId: store.id)),
          );
        },
        child: Container(child: Text(store.name))
      );
    }
  }
  </code></pre>
  
  <p>Another instance of this problem is I navigate on a child function.</p>
  
  <pre><code>@override
  Widget build(BuildContext context) {
    return Column(
      children: [
        WhiteButton(text: "Login with Facebook", onPressed: _loginWithFacebook),
        WhiteButton(text: "Login with Google", onPressed: _loginWithGoogle),
      ])
    )
  }
  
  _loginWithFacebook(context) async {
      ...
      var user = User.fromFacebook(result.accessToken.token, json.decode(graphResponse.body));
      await _login(user, context);
    }
  }
  
  _loginWithGoogle(context) async {
      ...
    GoogleSignInAccount googleUser = await _googleSignIn.signIn();
    await _login(User.fromGoogle(googleUser), context);
  }
  
  _login(user, context) async {
    var fetchedUser = await MeService.getUser(user);
    if (fetchedUser != null) {
      loginSuccess(fetchedUser);
      Navigator.popUntil(context, ModalRoute.withName(MainRoutes.root));
    } else {
      Navigator.push(
        context,
        MaterialPageRoute(builder: (_) =&gt; RegisterScreen(user: user)),
      );
    }
  }
  </code></pre>