初试flutter

114 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

widget

在Flutter中万物皆widget,不仅限制于ui组件,像手势检测、app的主题数据传递的theme

Flutter 中是通过 Widget 嵌套 Widget 的方式来构建UI和进行实践处理的

StatefulWidget

实现一个有状态的widget至少需要两个类
///1StatefulWidget类
///2:State类。StatefulWidget类本身是不变的,但是State类在widget生命周期中始终存在
  • createState()用于创建和StatefulWidget相关的状态,他在StatefulWidget的生命周期可能会多次被调用。

    eg:当一个SatatefulWidget同时插入到Widget树的多个位置时,Flutter框架会调用该方法为每一个位置生成一个独立的State实例

StatelessWidget

widget的构造函数应该使用命名参数,在命名参数中必须要传递的添加required关键字

在继承widget时,第一个参数应当是key

如果,widget需要接收子widget,child 或children 参数应当被放在参数列表的最后

widget 的属性应当尽可能的被声明为final,防止被意外改变

State生命周期

一个StatefulWidget类会对应一个State类,表示其对应的StatefulWidget需要维护的状态

当状态改变时,可以手动调用setState()方法通知Flutter框架,让其调用build方法重构widget树,从而达到更新ui的目的

在Widget树中获取到State对象

由于StatefulWidget中的具体逻辑都在State中,所以很多时候需要调用State对象的一些方法来使用

context获取

context对象有一个findAncestorStateOfType()方法

在Flutter中有一个默认的约定:如果StatefulWidget的状态是希望暴露的 ,则提供一个静态的of方法

通过GlobalKey

使用 GlobalKey 开销较大,如果有其他可选方案,应尽量避免使用它。另外,同一个 GlobalKey 在整个 widget 树中必须是唯一的,不能重复

通过RenderObject自定义Widget

状态管理

  • widget管理自己的状态
  • Widget管理子Widget的状态
  • 父widget和子Widget都管理状态

路由管理

MaterialPageRounte 继承自PagerRoute类

表示占有整个屏幕的一个页面

 MaterialPageRoute({
    WidgetBuilder builder,
    RouteSettings settings,
    bool maintainState = true,
    bool fullscreenDialog = false,
  })
  • builder

    它的作用是构建路由页面的具体内容

  • settings

    包含路由配置信息,如路由名称, 是否为路由首页

  • maintainState:是否要在不可见是释放

  • fullscreenDialog 新的路由页面是否是一个全屏的模态对话框

自定义路由切换可以通过继承自PageRoute

Navigator

Navigator是一个路由管理组件,它提供了打开和退出路由页的方法

  1. Future push(BuildContext context,Route route)

    将指定的路由入栈,返回值是一个Future 对象,可以用于接新路由出栈时的返回数据

  2. bool pop(BuildContext context,[result])

    result为关闭时要给下一个页面返回的数据

Navigator.push(BuildContext context, Route route)
//`等价于`
Navigator.of(context).push(Route route)