当前位置: 首页 > article >正文

flutter go_router 官方路由(一)基本使用

1 项目中添加最新的依赖
go_router: ^13.1.0

如下图所示,我当前使用的flutter版本为3.16.0
在这里插入图片描述

然后修改应用的入口函数如下:

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

void main() {
  runApp(const MyApp());
}


class MyApp extends StatelessWidget {
  const MyApp({super.key});
  
  
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerConfig: _router,
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
    );
    // return MaterialApp(
    //   title: 'Flutter Demo',
    //   theme: ThemeData(
    //     colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
    //     useMaterial3: true,
    //   ),
    //   home:  MyHomePage(),
    // );
  }
}

其实就是将原来的入口 MaterialApp 使用 MaterialApp.router 替换了,参数 routerConfig 就是配置的所有的路由页面,比如我这里的配置如下:


final GoRouter _router = GoRouter(
  routes: <RouteBase>[
    GoRoute(
      path: '/',
      builder: (BuildContext context, GoRouterState state) {
        return MyHomePage();
      },
      routes: <RouteBase>[
        GoRoute(
          path: 'two',
          builder: (BuildContext context, GoRouterState state) {
            return TwoPage();
          },
        ),
      ],
    ),
  ],
);

“/” 配置的就是加载的默认的启动的首页面,然后我这里面相当于是配置了两个基本的页面。

2 实现基本的页面交互

在页面MyHomePage放一个按钮,点击按钮打开 TwoPage 第二个页面,打开页面的核心代码如下:
使用 Navigator 正常操作如下“

    Navigator.of(context)
        .push(MaterialPageRoute(builder: (BuildContext context) {
      return TwoPage();
    }));

使用 go_router 操作如下:

context.go("/two");

然后在页面 TwoPage 中点击按钮返回上一个页面​:

使用 Navigator 正常操作如下:

 Navigator.of(context).pop();

​用 go_router 操作如下:

context.pop();
3 页面跳转传参数

基本简单参数传递,比如一个 userId,页面路由定义如下:ThreePage就是我定义的目标页面,它需要一个参数 userId。

GoRoute(
    path: 'three/:userId',
    builder: (BuildContext context, GoRouterState state) {
      // 使用 state.params 获取路由参数的值
      final userId = (state.pathParameters['userId']!);
      return ThreePage(userId:userId);
    },
  ),

点击一个按钮跳转目标页面,我这里传的参数 userId的值为 123

context.go("/three/123");

复杂传参数 请看后续


http://www.kler.cn/a/227983.html

相关文章:

  • Python||五城P.M.2.5数据分析与可视化_使用复式柱状图分析各个城市的P.M.2.5月度差异情况(中)
  • Java学习笔记2024/2/3
  • 您应该使用哪个库?jsoniter、easyjson 还是 go-json?为什么?
  • Android电动汽车充电服务vue+uniAPP微信小程序
  • docker初级问题一
  • Vite+Vue3使用Vue-i18n笔记
  • go消息队列RabbitMQ - 订阅模式-direct
  • 万户 ezOFFICE wpsservlet SQL注入漏洞
  • 2024/2/4 备战蓝桥杯 5-1 前缀和
  • 什么是 Java 中的 IO 和 NIO?它们之间有什么区别?什么是 Java 中的内存管理和垃圾回收?常见的垃圾回收算法有哪些?
  • Redisson看门狗机制
  • ubuntu 18.04修改网卡名称
  • 论文阅读-在分布式数据库环境中对哈希算法进行负载均衡基准测试
  • 调试OpenHarmony应用/服务
  • gpt今日最新新闻:gpts的广泛应用
  • Mysql架构系列——生产常用的高可用部署模式介绍
  • 程序执行内存区域,堆栈使用及区别
  • 如何在 Microsoft Azure 上部署和管理 Elastic Stack
  • 开源软件的影响力
  • 【数据结构与算法】(5)基础数据结构之队列 链表实现、环形数组实现详细代码示例讲解