Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Rotas nomeadas

Consegui fazer o desafio, porém gostaria de saber como faço para implementar a navegação nomeada no projeto.

Na main.dart, adicionei a initialroute e o map com as rotas:

initialRoute: '/',
      routes: {
        '/' : (context) =>  InheritedWidgetTasks(child: const InitialScreen()),
        '/create-task' : (context) => FormScreen(taskContext: context)
      },

No entanto, quando vou fazer a navegação da página principal para a página de formulário, não consigo passar o contexto necessário para que o app consiga salvar a tarefa. Essa é atual forma de navegação que encontrei:

Navigator.of(context).pushNamed('/create-tasks');

Na navegação anônima era feito dessa forma:

          Navigator.push(context, MaterialPageRoute(builder: (contextNew) {
            return FormScreen(
              taskContext: context,
            );
          }));
3 respostas
solução!

Olá Lucas, tudo bem?

Uma solução para isso é utilizar o onGenerateRoute ao invés de routes na sua MaterialApp. Isso permitirá que você passe o contexto necessário para a próxima tela.

Veja um exemplo de como ficaria a sua MaterialApp com onGenerateRoute:

MaterialApp(
  initialRoute: '/',
  onGenerateRoute: (RouteSettings settings) {
    if (settings.name == '/') {
      return MaterialPageRoute(builder: (context) => InheritedWidgetTasks(child: const InitialScreen()));
    } else if (settings.name == '/create-task') {
      return MaterialPageRoute(builder: (context) => FormScreen(taskContext: settings.arguments));
    }
    return null;
  },
)

E para navegar para a página de formulário, você pode fazer assim:

Navigator.of(context).pushNamed('/create-task', arguments: context);

Assim, o contexto será passado como argumento para a próxima tela e você poderá utilizá-lo para salvar a tarefa.

Espero ter ajudado e bons estudos!

Show! Muito obrigado!

Valeu pela ajuda!