一、应用入口

1. 初始化 Flutter 底层绑定 ,运行 App。

import 'package:flutter/material.dart';
import 'package:flutter_base/Application.dart';void main() {// 确保绑定初始化WidgetsFlutterBinding.ensureInitialized();// App初始化Application.init();
}

2. 注册 SDK /组件服务,配置命名路由。

import 'package:flutter/material.dart';
import 'package:flutter_base/LoginPage.dart';
import 'package:flutter_base/HomePage.dart';class Application {static void init() {registerService();runApp(const AppContainer());}static void registerService() {// 注册SDK|组件服务}
}class AppContainer extends StatelessWidget {const AppContainer({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Application',initialRoute: '/LoginPage',routes: {'/LoginPage': (context) => const LoginPage(),'/HomePage': (context) => const HomePage()});}
}

二、页面路由

1. 命名路由

命名路由(Named Routes)是一种使用预定义名称来管理和访问路由的机制。这种方法使代码更易于理解和维护,特别是在具有多个页面的复杂应用程序中。

2. 路由配置

MaterialApp 是 Flutter 框架中用于构建遵循 Material Design 规范的应用程序根组件。

  • title:应用标题
  • home:应用启动时显示的初始页面
  • initialRoute:指定初始路由名称(若设置,则忽略 home属性)
  • routes:静态路由表,预定义命名路由与页面的映射关系
  • onGenerateRoute:动态生成路由,处理未在 routes中定义的路径
  • ​​onUnknownRoute:当所有路由规则均不匹配时的兜底处理(如显示 404 页面)
import 'package:flutter/material.dart';
import 'package:flutter_base/LoginPage.dart';
import 'package:flutter_base/HomePage.dart';
import 'package:flutter_base/ErrorPage.dart';class AppContainer extends StatelessWidget {const AppContainer({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Application',initialRoute: Navigator.defaultRouteName,routes: {'/': (context) => const LoginPage(name: 'Login'),'/HomePage': (context) => const HomePage(name: 'Home')},onGenerateRoute: (settings) {print('onGenerateRoute: settings-$settings');if (settings.name == '/LoginPage') {return MaterialPageRoute(builder: (context) => LoginPage(name: 'Login'));}},onUnknownRoute: (settings) {print('onUnknownRoute: settings-$settings');return MaterialPageRoute(builder: (context) => ErrorPage(name: 'Error'));});}
}

先查询 routes 静态路由表,未映射到自定义路由时,触发 onGenerateRoute,当所有路由规则均不匹配时,触发 onUnknownRoute。

3. 页面传参

3.1 跳转页面的参数传递

class LoginPageState extends State<LoginPage> {void push() {// pushNamed传递参数Navigator.pushNamed(context, '/HomePage', arguments: {'title': '首页'});// 构造函数传递参数Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage(arguments: {'title': '首页'}));}  
}

3.2 命名路由的参数获取

在命名路由的回调方法中获取 settings 参数,通过 HomePage 的构造函数传递。

MaterialApp(...onGenerateRoute: (settings) {if (settings.name == '/HomePage') {Map<String, dynamic>?  _arguments;if (settings.arguments != null) {_arguments = settings.arguments as Map<String, dynamic>;}return MaterialPageRoute(builder: (context) => HomePage(arguments: _arguments));}}
);

3.3 目标页面的参数获取

目标页面通过 ModalRoute.of(context) 获取 settings 参数。

class HomePageState extends State<HomePage> {void getSettings() {final modalRoute = ModalRoute.of(context);if (modalRoute != null) {final settings = modalRoute.settings;print('settings: name-${settings.name}, arguments-${settings.arguments}');}}
}

三、组件定制

1. 无状态组件

无状态组件(StatelessWidget)的所有属性均通过 final 声明,创建后无法修改。任何 UI 变化都需重建新的 Widget 实例。

import 'package:flutter/material.dart';class CustomText extends StatelessWidget {final String content; // 不可变属性const CustomText({required this.content});@overrideWidget build(BuildContext context) {return Text(content); // UI 仅依赖初始配置}
}
2. 有状态组件

有状态组件(StatefulWidget)通过分离不可变的 Widget 配置与可变的 State 对象,实现高效的状态管理和 UI 更新机制。

import 'package:flutter/material.dart';class HomePage extends StatefulWidget {final Map<String, dynamic>? arguments;const HomePage({super.key, this.arguments});@overrideState<HomePage> createState() => HomePageState(); // 创建关联的State
}class HomePageState extends State<HomePage> {int _counter = 0;void _incrementCounter() {setState(() { // 状态更新方法_counter++;});print('arguments: ${widget.arguments}');}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Home')),body: Center(child: ElevatedButton(child: Text('Click Increment: $_counter'),onPressed: _incrementCounter,),),);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92808.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92808.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92808.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 数据操作全流程:创建、读取、更新与删除实战

MySQL系列 文章目录MySQL系列前言一、Create(创建)并插入数据1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入冲突时同步更新1.4 冲突时替换二、Retireve读取数据2.1 全列查询2.2 查询指定列2.3 查询字段为表达式2.4 结果去重 DISTINCT2.5 where条件筛选2.6 order by语…

SQL约束:数据完整性的守护者

在SQL中&#xff0c;约束&#xff08;Constraints&#xff09; 是作用于数据库表字段上的规则&#xff0c;用于强制保证数据的完整性、准确性和一致性。当插入、更新或删除数据时&#xff0c;约束会自动验证操作是否符合规则&#xff0c;若违反则拒绝执行。 以下是SQL中常见的约…

Springboot-vue 地图展现

在很多社区管理系统中&#xff0c;地图展示功能是一个重要的模块&#xff0c;它能直观地呈现小区的地理位置分布。本文将详细梳理从前端触发请求到地图上展示小区数据的完整流程&#xff0c;帮助大家理解前后端协同工作的具体细节。一、前端触发&#xff1a;页面加载与地图初始…

Vue 3 登录组件

Login.vue 组件详细分析整体架构 Vue 3 登录组件&#xff0c;采用 Composition API Element Plus UI 库&#xff0c;实现了完整的用户认证界面。 模板结构分析 1. 容器布局 <div class"login-container"><el-card class"login-card"><!-- …

小结: getSpringFactoriesInstances从 `spring.factories` 文件中加载和实例化指定类型的类

getSpringFactoriesInstances 方法工作原理 getSpringFactoriesInstances 是 Spring Boot 框架中的一个核心方法&#xff0c;用于从 spring.factories 文件中加载和实例化指定类型的类。这是 Spring Boot 实现自动配置和插件化扩展的关键机制。 1. 基本功能 该方法的主要作用是…

selenium SessionNotCreatedException问题解决办法

在上周有一台服务器重启之后&#xff0c;Chrome浏览器也自动升了级&#xff0c;原本能够正常使用的自动化办公程序突然没法用了&#xff0c;出现了下面的报错提示。codes/addCancelBdld.py:980: DeprecationWarning: use options instead of chrome_optionsdriver webdriver.C…

SOAP HTTP Binding

SOAP HTTP Binding 引言 SOAP(Simple Object Access Protocol)是一种轻量级、简单的协议,用于在网络上交换结构化信息。它广泛应用于Web服务中,用于实现不同系统和应用程序之间的通信。SOAP HTTP Binding是SOAP协议的一种实现方式,它允许使用HTTP协议来传输SOAP消息。本…

GPT-5免费使用教程(国内可访问)

GPT-5来了&#xff0c;压力给到各大AI模型厂商&#xff1f; 北京时间2025年8月7日&#xff0c;OpenAI 推出两款开源模型 gpt-oss-120b / 20b&#xff0c;性能逼近 o4-mini/o3-mini&#xff0c;一时间火爆AI圈&#xff1b;但这好像只是一道开胃小菜&#xff0c;在北京时间2025年…

内存作假常见方案可行性分析

内存作假通常修改所涉及到的几个文件&#xff1a;M sys/frameworks/base/core/java/android/app/ActivityManager.javaM sys/frameworks/base/core/jni/android_os_Debug.cppM sys/frameworks/base/core/jni/android_util_Process.cppM sys/frameworks/base/services/core/java…

C#(vs2015)利用unity实现弯管机仿真

以下是基于 Visual Studio 2015 和 Unity 实现弯管机仿真的完整技术流程&#xff0c;结合工业仿真开发的最佳实践整理而成&#xff0c;涵盖建模、通信、运动控制和交互逻辑等核心模块&#xff1a;---一、环境配置与基础框架搭建 1. Unity 与 VS2015 联动 - 安装 [Visual Studio…

华为USG防火墙双机,但ISP只给了1个IP, 怎么办?

华为USG防火墙双机&#xff0c;但ISP只给了1个IP&#xff0c; 怎么办&#xff1f; 华为USG双机使用VRRP&#xff0c;需要3个Ip 本次联通只给了 100.1.1.0/30 这一个互联段 联通侧用了100.1.1.1&#xff0c; 我们这一侧只有100.1.1.2 怎么办&#xff1f; 找联通多要几个Ip&…

Go 工具链环境变量实战:从“command not found”到工具全局可用的全流程复盘

在 Go 生态里&#xff0c;丰富的命令行工具极大提升了开发效率。但很多小伙伴第一次用 go install 安装第三方工具后&#xff0c;却遇到终端里找不到命令的尴尬——明明装好了&#xff0c;终端却报 “command not found”。这是为什么呢&#xff1f;本文结合我亲身踩过的坑&…

MCU 软件断点注意事项!!!

——为什么调试器会在运行中改我的Flash程序&#xff1f;调试单片机时&#xff0c;很多人都有这样的疑问&#xff1a;明明我在调试前刷进去的固件是好的&#xff0c;为什么加了一个断点之后&#xff0c;调试器居然去改了 Flash&#xff1f; 如果我拔掉调试器&#xff0c;这个固…

腾讯iOA:数据安全的港湾

声明&#xff1a;文章为本人真实测评&#xff0c;非广告&#xff0c;无推广&#xff0c;为用户体验文章 前言 当前网络安全威胁日益复杂化&#xff0c;恶意软件攻击手段不断升级。例如&#xff1a;钓鱼邮件携带的伪装安装包可能引发勒索病毒在内网扩散&#xff0c;导致业务中断…

相册管理系统介绍

之前在github和gitee上了找了好久也没找到符合自己需求的相册管理系统&#xff0c;最近就静下心来自己写了一套。系统分为前台相册系统与后台管理系统。 技术框架采用的是前端vueelementui&#xff0c;后端springbootmybatisplus。 下面是项目截图&#xff1a;项目功能介绍&…

企业级高性能WEB服务器Nginx

nginx安装 1.nginx编译安装 #在nginx官网获取安装包 [rootwebserver mnt]# wget https://nginx.org/download/nginx-1.24.0.tar.gz#解压安装包 [rootwebserver mnt]# tar zxf nginx-1.24.0.tar.gz [rootwebserver mnt]# cd nginx-1.24.0/#安装编译nginx需要的环境软件 [rootw…

【Node.js从 0 到 1:入门实战与项目驱动】1.3 Node.js 的应用场景(附案例与代码实现)

文章目录1.3 Node.js 的应用场景&#xff08;附案例与代码实现&#xff09;1.3 Node.js 的应用场景&#xff08;附案例与代码实现&#xff09;一、Web 服务器开发二、API 开发三、命令行工具&#xff08;CLI&#xff09;开发四、实时应用开发小结1.3 Node.js 的应用场景&#x…

No time to train! Training-Free Reference-Based Instance Segmentation之论文阅读

摘要 图像分割模型的性能历来受到大规模标注数据收集成本高昂的制约。Segment Anything Model&#xff08;SAM&#xff09;通过一种可提示、与语义无关的分割范式缓解了这一根本问题&#xff0c;但在处理新图像时&#xff0c;仍然需要手动提供视觉提示或依赖复杂的领域相关提示…

本地文件夹与 GitHub 远程仓库绑定并进行日常操作的完整命令流程

以下是将本地文件夹与 GitHub 远程仓库绑定并进行日常操作的完整命令流程&#xff0c;特别针对你的需求&#xff08;忽略数据集、偏好使用 rebase 保持主分支整洁&#xff09;进行了优化&#xff1a; 一、初始设置&#xff08;首次绑定&#xff09;在本地项目文件夹初始化 Git …

windows10 ubuntu 24.04 双系统 安装教程

准备windows安装包解压到u盘中作为启动盘准备ubuntu安装包https://ubuntu.com/download/desktop/thank-you?version24.04.3&architectureamd64<strue解压到u盘中作为启动盘准备磁盘分区安装windows操作系统安装disk geniusWindows 三个NTFS的分区System: windows操作系…