Flutter学习——杂记篇

《Flutter实战·第二版》- Preview

1. State生命周期

  • initState()
  • 当 widget 第一次插入到 widget 树时会被调用,对于每一个State对象,Flutter 框架只会调用一次该回调。
  • 一次性的操作,如状态初始化、订阅子树的事件通知等。
  • didChangeDependencies()
  • 当State对象的依赖发生变化时会被调用。
  • 系统语言 Locale 或应用主题改变时。
  • 组件第一次被创建后挂载的时候(包括重创建)对应的didChangeDependencies也会被调用。
  • build()
  • 在调用initState()之后。
  • 在调用didUpdateWidget()之后。
  • 在调用setState()之后。
  • 在调用didChangeDependencies()之后。
  • 在State对象从树中一个位置移除后(会调用deactivate)又重新插入到树的其它位置之后。
  • reassemble()

此回调是专门为了开发调试而提供的,在热重载(hot reload)时会被调用,此回调在Release模式下永远不会被调用。

  • didUpdateWidget()

在 widget 重新构建时,在新旧 widget 的key和runtimeType同时相等时该回调会被调用。

  • deactivate()

当 State 对象从树中被移除时,会调用此回调。 如果移除后没有重新插入到树中则紧接着会调用dispose()方法。

  • dispose()

当 State 对象从树中被永久移除时调用;通常在此回调中释放资源。

2. 路由管理

管理多个屏幕有两个核心概念和类:Route 和 Navigator。Route是应用程序的“屏幕”或“页面”的抽象(可以认为是Activity), Navigator是管理Route的Widget。Navigator可以通过push和pop route以实现页面切换。

  • 打开新的页面
Future push(BuildContext context, Route route)
// 命名路由
Future pushNamed(BuildContext context, String routeName,{Object arguments})
//获取路由参数  
var args=ModalRoute.of(context).settings.arguments;
  • 关闭页面
bool pop(BuildContext context, [ result ])
// result 为页面关闭时返回给上一个页面的数据
  • onGenerateRoute属性
Route<dynamic> Function(RouteSettings settings)

onGenerateRoute 只会对命名路由生效。

调用Navigator.pushNamed(…)打开命名路由时,如果指定的路由名在路由表中已注册,则会调用路由表中的builder函数来生成路由组件;如果路由表中没有注册,才会调用onGenerateRoute来生成路由。

Navigator.push(BuildContext context, Route route)
//等价于
Navigator.of(context).push(Route route)
  • 打开新页面并传值
    A页面跳转到B页面并传值
var map = {
    "storeCode": code,
    "storeId": storeId,
    "libraryId": libraryId,
};
Navigator.pushNamed(context, "scan_tray", arguments: map);

B页面接收

@override
void initState() {
  super.initState();
    Future.delayed(Duration.zero, () {
      Map<String, dynamic>? args =
            ModalRoute.of(context)!.settings.arguments as Map<String, dynamic>?;
    });
  }
  • 返回上一页并传值
    B页面返回到A页面并传值
Navigator.pop(context, result);

A页面接收

ElevatedButton(
    onPressed: () async {
        var result = await Navigator.push(context,
            MaterialPageRoute(builder: (context) => B页面()),);
        print("返回值为--"+result);
    },
    child: Text("跳转到B页面")
),

你可能感兴趣的:(【Android学习笔记】,flutter,android)