Операция навигатора запрашивается с контекстом, который не включает навигатор. (Функция Builder не будет отображать MainPage ()) - PullRequest
0 голосов
/ 20 апреля 2020

Как только я нажимаю кнопку, я получаю код ошибки «Запрошена операция навигатора с контекстом, который не включает навигатор». Код, который я использую для навигации, находится в RegisterPage, и функция компоновщика должна отображать MainPage.

void main() => runApp(RegisterPage());

class RegisterPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
      appBar: AppBar(
        title: Text('Register Your Account'),
        centerTitle: true,
        backgroundColor: Colors.green,
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () {
            Navigator.of(context)
                .push(
              MaterialPageRoute(
                  builder: (context) => MainPage()
              ),
            );
          },
          child: Text('Sign in as guest'),
        )),
      )
    );
  }
}

  class MainPage extends StatefulWidget{
  String get title => "Cykla i stockholm";

  MapPage createState()=> MapPage();
  }

1 Ответ

0 голосов
/ 20 апреля 2020

Это потому, что виджет, использующий навигатор (RegisterPage), находится на одном уровне в дереве виджетов с виджетом, который создает навигатор (MaterialApp)

РЕШЕНИЕ : сделайте RegisterPage ниже MaterialApp, чтобы иметь возможность использовать context:

class RegisterPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: Text('Register Your Account'),
            centerTitle: true,
            backgroundColor: Colors.green,
          ),
          body: Builder(
            builder: (ctx)=> Center(//this context here has access to Navigator
                child: RaisedButton(
                  onPressed: () {
                    Navigator.of(ctx)
                        .push(
                      MaterialPageRoute(
                          builder: (context) => MainPage()
                      ),
                    );
                  },
                  child: Text('Sign in as guest'),
                )),
          ),
        )
    );
  }
}
...