Flutter começar Passo Dois - Gestão Routing

Flutter começar Passo Dois - Gestão Routing

1. Page Ir

2. Routing

3. Nome da rota

4. rotas gancho gerado

Falando de roteamento, quando aprendemos a rede de computadores também aprendeu uma rota, mas essa rota ou-roteamento. Mas só a partir da perspectiva do significado funcional, ambos bastante similar.
Route (Rota) no desenvolvimento móvel geralmente se refere a página (Página), Route significado conceitual com este de uma única página de desenvolvimento de aplicações web é o mesmo, Route no Android geralmente se refere a uma atividade.
gestão de rotas Flutter e nativo para desenvolver semelhante, se é Android ou iOS, gestão de navegação irá manter uma pilha de roteamento, roteamento pilha (push) correspondente à operação para abrir uma nova página, o encaminhamento da pilha (POP) operação correspondente operação de fechamento da página e a principal gestão de rotas é como gerenciar a pilha de roteamento.
.
.

1. uma pequena castanha como o salto página
no desenvolvimento nativo Android, sempre fazemos a página de salto. Agora nós Flutter, mas também aprender sobre como fazer a página de salto.
No caso do nosso balcão, nos deparamos com o seguinte código:

class NewRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("New route"),
      ),
      body: Center(
        child: Text("This is new route"),
      ),
    );
  }
}

Esta classe herda de StatelessWidget, não há dúvida de que é um widget pai. Somarmos a isso o AppBar, definir o título, no centro das instruções na tela "Esta é nova rota".
Então nós criança Coluna no método _MyHomePageState.build de adicionar um botão widget (FlatButton):

Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
      ... //省略无关代码

//以下代码
      FlatButton(
         child: Text("open new route"),
         textColor: Colors.blue,
         onPressed: () {
          //导航到新路由   
          Navigator.push( context,
           MaterialPageRoute(builder: (context) {
              return NewRoute();
           }));
          },
         ),
        //以上代码 
       ],
 )

E, então, re-calor sync APP, em seguida, clique no botão, ele vai saltar para uma nova página.

Navigator 2.
Navigator é um componente de gerenciamento de rota que fornece um método para a página aberta e rotas de saída. Navigator através de uma pilha para administrar o conjunto rota ativa. Normalmente, a página da tela atual é exibida topo rota da pilha. Navigator oferece uma variedade de métodos para gerenciar a pilha de roteamento, aqui nós só introduzir os dois métodos mais comumente usados:

impulso Future (contexto BuildContext, route Rota)

boleano pop (BuildContext contexto, [resultado])

Uma pequena castanha: Passando parâmetros (roteamento por valor) entre as páginas, criamos uma nova razão para página:

class TipRoute extends StatelessWidget {
  TipRoute({
    Key key,
    @required this.text,  // 接收一个text参数
  }) : super(key: key);
  final String text;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("提示"),
      ),
      body: Padding(
        padding: EdgeInsets.all(18),
        child: Center(
          child: Column(
            children: <Widget>[
              Text(text),
              RaisedButton(
                onPressed: () => Navigator.pop(context, "我是返回值"),
                child: Text("返回"),
              )
            ],
          ),
        ),
      ),
    );
  }
}

E depois saltar para o código que está abaixo da nova rota da página;

class RouterTestRoute extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: RaisedButton(
        onPressed: () async {
          // 打开`TipRoute`,并等待返回结果
          var result = await Navigator.push(
            context,
            MaterialPageRoute(
              builder: (context) {
                return TipRoute(
                  // 路由参数
                  text: "我是提示xxxx",
                );
              },
            ),
          );
          //输出`TipRoute`路由返回结果
          print("路由返回值: $result");
        },
        child: Text("打开提示页"),
      ),
    );
  }
}

Nós podemos re-escrever uma entrada, ou você pode fazer alterações diretamente no exemplo acima a página de salto.

3. Nome da rota
chamada "chamado Route" (Nomeado Rota), que é o nome da rota, podemos dar um nome ao percurso, e então você pode abrir uma nova rota direta pelo nome da rota, que traz uma gestão de encaminhamento forma intuitiva e simples.

Vibração encaminhamento estrutura da tabela é tal que:

Map <String, WidgetBuilder> rotas;

O registro é maneira muito simples encaminhamento mesa, vamos voltar para o exemplo, "contra" antes, e em seguida, localize a classe método de construção MyApp MaterialApp, adicionar rotas propriedade, o código é a seguinte:

MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
    primarySwatch: Colors.blue,
  ),
  //注册路由表
  routes:{
   "new_page":(context) => NewRoute(),
    ... // 省略其它路由注册信息
     //  "/":(context) => MyHomePage(title: 'Flutter Demo Home Page'), //注册首页路由
  } ,
  home: MyHomePage(title: 'Flutter Demo Home Page'),//标记主页
);

Agora vamos ter concluído o registo da tabela de roteamento. O código de casa roteamento acima não usar rotas nomeadas, se quisermos ser registrado como uma casa de rota nomeada como fazê-lo? código realmente muito simples, direto "Agora Início roteamento e, em seguida, levante a comentários não marcam esta linha abaixo da home page pode ser comentada.
Então, podemos usar rotas nomeadas para saltar, e saltar directamente quer executar tarefas locais adicionar uma linha de código:

Navigator.pushNamed(context, "new_page");

Pode ser. "NEW_PAGE" Estamos registrados na tabela de roteamento acima mencionado.

No exemplo acima, vimos como passar parâmetros em circunstâncias normais, e agora olhamos para como passar parâmetros ao usar rotas nomeadas:

olhar Primeiro, na página da meta

class EchoRoute extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    //获取路由参数
    var args=ModalRoute.of(context).settings.arguments;
    //...省略无关代码
    print(args);
    return Scaffold(
      appBar: AppBar(
        title: Text("hahah"),
      ),
      body: (
      Center(
        child: (
            Text(args)
        ),
      )
      ),
    );
  }
}

Chamamos a rota estamos agora na parte superior do primeiro, e depois chamamos este lugar salto:

Navigator.of(context).pushNamed("new_page",arguments: "hi");

Para que o nosso argumento vai passar.
Aqui Insert Picture Descrição
Suponha que nós também queremos passar acima parâmetros de roteamento TipRoute página encaminhamento registrado para o exemplo da tabela de roteamento, para que ele possa ser aberto pelo nome de roteamento. No entanto, devido à TipRoute aceita um argumento de texto, como é que se encaixam neste caso não muda a fonte TipRoute premissa? É realmente muito simples:

MaterialApp(
  ... //省略无关代码
  routes: {
   "tip2": (context){
   //将我们本页面的参数放到构造函数中
     return TipRoute(text: ModalRoute.of(context).settings.arguments);
   },
 }, 
);

4. rotas geradas gancho
Suponha que queremos desenvolver um fornecedor de electricidade APP, quando o usuário não está logado pode ver as informações da loja, mercadoria, etc., mas após a transação, carrinho de compras, precisa estar logado para relógio informações pessoais do usuário e outras páginas. A fim de alcançar as funções acima, precisamos determinar o usuário fizer logon no estado aberto antes do encaminhamento cada página! Se cada aberto rota antes que todos nós precisamos para determinar o que será muito problemático, então qual a melhor maneira de fazer? A resposta é sim!

MaterialApp tem uma propriedade onGenerateRoute, pode ser chamado para abrir uma rota nomeada, disse que pode ser a razão pela qual, é porque quando a chamada Navigator.pushNamed (...) para abrir uma rota nomeada, se o nome da rota especificada já está registrado na tabela de roteamento, ele vai chamar o encaminhamento função de construtor de tabela para gerar componente de roteamento; se a tabela de roteamento não está registado, vai chamar onGenerateRoute para gerar rotas. assinatura callback onGenerateRoute da seguinte forma:

Função Route (configurações RouteSettings)
Com onGenerateRoute callback, para alcançar a função de controle de permissões de página acima é muito fácil: nós damos permissão para usar a tabela de roteamento, substituído por um callback onGenerateRoute, então o callback controle unificado, tais como:

MaterialApp(
  ... //省略无关代码
  onGenerateRoute:(RouteSettings settings){
      return MaterialPageRoute(builder: (context){
           String routeName = settings.name;
       // 如果访问的路由页需要登录,但当前未登录,则直接返回登录页路由,
       // 引导用户登录;其它情况则正常打开路由。
     }
   );
  }
);

Note, onGenerateRoute só terão efeito rota nomeada.

Publicado 47 artigos originais · ganhou elogios 15 · vê 10000 +

Acho que você gosta

Origin blog.csdn.net/qq_41525021/article/details/104358087
Recomendado
Clasificación