1. package 包的管理
可以在项目中新建一个 package(文件夹)并在其中创建多个页面 dart 文件,举例如下:
- package 名称
pages
- 页面文件及引入方式
import "package:myapp/pages/home.dart"
import "package:myapp/pages/detail.dart"
import "package:myapp/pages/edit.dart"
2. 页面的路由(跳转)
使用路由可以实现定义好路由的路径,可以在程序启动构造 App 时传入一个 routes 参数。这是一个 map:
- key 是路径
- value 是构造页面 widget 的闭包,带有一个 context 参数来自于调用路由的上下文
void main()
{
runApp(MerterialApp(
// 不再使用 home 属性,使用 initialRoute 代替
initialRoute: '/',
routes: {
'/' : (context) => Home(),
'/detail' : (context) => Detail(),
'/edit' : (context) => Edit(),
},
))
}
执行页面的路由跳转可以通过在点击事件中调用 Navigator 进行,传入上下文 context 和路由路径,其中 context 就是 widget 在 build(BuildContext context) 的参数。
// 跳转到 detail 页面
Navigator.pushNamed(context, "/Detail");
当跳转到一个下一个页面时如果下个页面有 appBar(导航栏),那么导航栏会自动出现一个返回按钮。
3. widget 的生命周期
首先区分 stateless 和 stateful,stateless 的方法只会被调用一次,而 stateful 则会在 setState 时重复调用。
而生命周期就体现在 stateful widget 的 State 对象中
有三个生命周期方法:
- initState() 在初始化时被调用一次
- build(BuildContext context) 在构造内容时调用,被调用一次,在 state 变化时重复被调用
- dispose 在 widget 被移除时调用。