Flutter(第三天)路由管理

路由管理学习笔记

路由(Route)在移动开发中通常指页面(Activity)

    Navigator.push(context,new MaterialPageRoute(
        builder:(context){
          return NewRute1();
        }
    ));

MaterialPageRoute继承自PageRoute类

  MaterialPageRoute({
  //builder 是一个WidgetBuilder类型的回调函数,它的作用是构建路由页面的具体内容,返回值是一个widget。我们通常要实现此回调,返回新路由的实例。
    WidgetBuilder builder,
 //settings 包含路由的配置信息,如路由名称、是否初始路由(首页)。
    RouteSettings settings,
//maintainState:默认情况下,当入栈一个新路由时,原来的路由仍然会被保存在内存中,如果想在路由没用的
//时候释放其所占用的所有资源,可以设置maintainState为false。
    bool maintainState = true,
//fullscreenDialog表示新的路由页面是否是一个全屏的模态对话框,
    bool fullscreenDialog = false,
  })

如果想自定义路由切换动画,可以自己继承PageRoute来实现,我们将在后面介绍动画时,实现一个自定义的路由Widget。

Navigator

Navigator是一个路由管理的widget

Future push(BuildContext context, Route route)

将给定的路由入栈(即打开新的页面),返回值是一个Future对象,用以接收新路由出栈(即关闭)时的返回数据。

bool pop(BuildContext context, [ result ])

将栈顶路由出栈,result为页面关闭时返回给上一个页面的数据

注册路由表

return new MaterialApp(
  title: 'Flutter Demo',
  theme: new ThemeData(
    primarySwatch: Colors.blue,
  ),
  //注册路由表
  routes:{
   "new_page":(context)=>NewRoute(),
  } ,
  home: new MyHomePage(title: 'Flutter Demo Home Page'),
);
通过路由名打开新路由页
Navigator.pushNamed(context, "new_page");

命名路由参数

打开路由时传递参数

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

在路由页通过RouteSetting对象获取路由参数:

class EchoRoute extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    //获取路由参数  
    var args=ModalRoute.of(context).settings.arguments
    //...省略无关代码
  }
}

包管理

Android使用Gradle来管理依赖,Flutter用pubspec.yaml(位于项目根目录)来管理第三方依赖包

pubspec.yaml的简单示例

#应用或包名称
name: flutter_in_action
#应用或包的描述、简介
description: First Flutter application.
#应用或包的版本号
version: 1.0.0+1
#应用或包依赖的其它包或插件
dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.2
#开发环境依赖的工具包(而不是flutter应用本身依赖的包
dev_dependencies:
  flutter_test:
    sdk: flutter
#flutter相关的配置选项
flutter:
  uses-material-design: true

依赖本地包

dependencies:
    pkg1:
        path: ../../code/pkg1

依赖Git

dependencies:
  pkg1:
    git:
      url: git://github.com/xxx/pkg1.git

上面假定包位于Git存储库的根目录中。如果不是这种情况,可以使用path参数指定相对位置

dependencies:
  package1:
    git:
      url: git://github.com/flutter/packages.git
      path: packages/package1

资源管理

assets是会打包到程序安装包中的,可在运行时访问。常见类型的assets包括静态数据(例如JSON文件)、配置文件、图标和图片(JPEG,WebP,GIF,动画WebP / GIF,PNG,BMP和WBMP)等。

指定 assets

和包管理一样,Flutter也使用pubspec.yaml文件来管理应用程序所需的资源

flutter:
  assets:
    - assets/my_icon.png
    - assets/background.png
class NewRute1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
        title: Text("New route"),
      ),
      body: Center(
        child: Image.asset('graphics/icon_tj70_zbb@3x.png')
      ),
    );
  }
}

Dart线程模型

Dart 在单线程中是以消息循环机制来运行的,其中包含两个任务队列,一个是“微任务队列” microtask queue,一个是“事件队列” event queue,微任务队列的执行优先级高于事件队列。
在这里插入图片描述

Flutter异常捕获

Dart中可以通过try/catch/finally来捕获代码块异常

Flutter框架异常捕获

Flutter 框架为我们在很多关键的方法进行了异常捕获

//当我们布局发生越界或不合规范时,Flutter就会自动弹出一个错误界面,这是因为Flutter已经在执行build方法时添加了异常捕获
@override
void performRebuild() {
 ...
  try {
    //执行build方法  
    built = build();
  } catch (e, stack) {
    // 有异常时则弹出错误提示  
    built = ErrorWidget.builder(_debugReportException('building $this', e, stack));
  } 
  ...
}

https://book.flutterchina.club/chapter2/thread_model_and_error_report.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值