Flutter路由跳转的两种方式

1.基本路由跳转:文件引入在你要跳转的页面引入

复制代码
        ElevatedButton(
            onPressed: () {
              Navigator.of(context).push(
                MaterialPageRoute(
                  builder: (BuildContext context) {
                    return const NewsPage(
                      arguments: {
                        "title": "基本路由新闻页面传值",
                        "aid": 88888888,
                      },
                    );
                  },
                ),
              );
            },
            child: const Text('基本路由跳转新闻页面(传值)'),
          ),

2.命名路由跳转:此时文件在main.dart文件引入

复制代码
        ElevatedButton(
            onPressed: () {
              Navigator.pushNamed(context, '/news', arguments: {
                "title": "命名路由新闻页面传值",
                "aid": 999999999,
              });
            },
            child: const Text('命名路由跳转新闻页面(传值)'),
          ),

此时需要在main.dart页面配置相关属性

复制代码
import 'package:flutter/material.dart';
import "./pages/namedRoutes/tabs.dart";
import "./pages/namedRoutes/news.dart";
import "./pages/namedRoutes/form.dart";

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

class MyApp extends StatelessWidget {
  // 1.配置路由表
  final Map routes = {
    "/": (context) => const Tabs(),
    "/form": (context) => const FormPage(),
    "/news": (context, {arguments}) => NewsPage(arguments: arguments),
  };
  MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Flutter Demo",
      debugShowCheckedModeBanner: false, // 去除debug标签
      theme: ThemeData(
        primarySwatch: Colors.blue,
        primaryColor: Colors.red,
      ),
      // home: const Tabs(),
      //2、调用onGenerateRoute处理
      onGenerateRoute: (RouteSettings settings) {
        // 统一处理
        final String? name = settings.name;
        final Function? pageContentBuilder = routes[name];
        if (pageContentBuilder != null) {
          if (settings.arguments != null) {
            final Route route = MaterialPageRoute(
                builder: (context) =>
                    pageContentBuilder(context, arguments: settings.arguments));
            return route;
          } else {
            final Route route = MaterialPageRoute(
                builder: (context) => pageContentBuilder(context));
            return route;
          }
        }
        return null;
      },
    );
  }
}
相关推荐
一只大侠的侠4 小时前
Flutter开源鸿蒙跨平台训练营 Day 5Flutter开发鸿蒙电商应用
flutter·开源·harmonyos
choke2334 小时前
[特殊字符] Python 文件与路径操作
java·前端·javascript
云飞云共享云桌面4 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
Deng9452013144 小时前
Vue + Flask 前后端分离项目实战:从零搭建一个完整博客系统
前端·vue.js·flask
威迪斯特4 小时前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
wuhen_n4 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
大鱼前端4 小时前
为什么我说CSS-in-JS是前端“最佳”的糟粕设计?
前端
不爱吃糖的程序媛4 小时前
Capacitor:跨平台Web原生应用开发利器,现已全面适配鸿蒙
前端·华为·harmonyos
AC赳赳老秦4 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
CHU7290354 小时前
淘宝扭蛋机抽盒小程序前端功能解析:解锁趣味抽盒新体验
前端·小程序