Flutter学习——杂记篇

Flutter学习——杂记篇,第1张

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页面")
),

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存