dart学习笔记

前言

    本文记载dart入门的一些基础
参考 https://flutter.cn/docs/development/ui/interactive

有状态和无状态widgets

    在flutter中,渲染在界面上的视图都可以堪称是一个个的widget构成,类比ios中的视图view,一些widget是无状态的,都是stateleesWidget的子集,比如Icon,Text,IconButton等,其他widget是有状态的,是statefulWidget的子集。这些widget可以通过和用户的交互改变自身的状态和表现出来的样式,比如:CheckBox,Slider,Form等。

    一个有状态的widget包含两个子类,一个statefulWidget子类和一个state子类,state累包含该widget的可变状态并定义该widget的build()方法。当wedget状态变化时,State对象调用setState(),告诉框架重新绘制widegt。

状态管理

   如何决定widget的状态管理可以通过以下原则:如果状态是用户数据,滑块的位置等最好由父widget进行管理。 如果状态有关界面外观效果,比如动画,状态最好由widget本身进行管理。

动画概览

   flutter中的动画系统基于animation,Widget可以直接讲这些动画合并到子集的build方法中来读取他们的当前值或者监听他们的状态变化,也可以讲其作为复杂动画的基础传递给其他widget。

animation

   动画的收腰组成部分就是Animation类,一个动画表现在在其生命周期内发生变化的特定类型的值。大多需要执行动画的wiget都需要接受一个Animation对象作为参数,从而获取动画的当前状态值以及应当监听的值的更改。

addListener

    每当动画的状态发生变化时,动画会通知所有通过addListener添加的监听器。然后正在监听动画的state调用自身的setState方法,根据状态来进行widget重新构建。

addStatusListener

    动画还提供了AnimationStatus,表示动画讲如何随时间进行变化,当动画状态发生变化时,动画都会通知addStatusListener添加的监听器。

补间动画

    补间动画本身值定义了如何在两个值件进行插值。要获取动画当前帧的具体值,需要一个动画来确定当前状态,有两种方法可以讲补间动画与动画组合在一起以获得动画具体值。 1、 使用evaluate方法处理动画的当前值获得一个对应的插值。 2、使用animate方法处理一个动画。