Flutter widget框架

Flutter Widget 采用现代响应式框架构建,这是从 React 中获得的灵感,中心思想是用 Widget 构建 UI。

在 Flutter 里一切的组件都是一个 Widget,当 Widget 的状态发生变化时,Widget 会重新构建 UI,Flutter 会对比前后变化的不同, 以确定底层渲染树从一个状态转换到下一个状态所需的最小更改。这种概念非常类似于 React 中的 VDOM 以及 Diff 算法,的确 Flutter 是从中借鉴的。同时 Flutter 的数据流也是单向绑定的。

image.png

class App extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return new Center(
            child: new Text('Hello, world!'),
        );
    }
}

在整个应用的初始化,只需要把 Widget 传给 runApp 即可。

import 'package:flutter/material.dart';

void main() {
    runApp(new App());
}

生命周期

在 StatefulWidget 调用 createState 之后,框架将新的状态对象插入树中,然后调用状态对象的 initState。 子类化 State 可以重写initState,以完成仅需要执行一次的工作。 例如,您可以重写 initState 以配置动画或订阅 platform services。initState 的实现中需要调用 super.initState。

当一个状态对象不再需要时,框架调用状态对象的 dispose。 您可以覆盖该 dispose 方法来执行清理工作。例如,您可以覆盖 dispose 取消定时器或取消订阅 platform services。dispose 典型的实现是直接调用 super.dispose。


image.png
import 'package:flutter/material.dart';

class LifecycleAppPage extends StatefulWidget {
    @override
    State<StatefulWidget> createState() {
        return new _LifecycleAppPageState('构造函数');
    }
}

class _LifecycleAppPageState extends State<LifecycleAppPage> with WidgetsBindingObserver {
    String str;

    int count = 0;

    _LifecycleAppPageState(this.str);

    @override
    void initState() {
        print(str);
        print('initState');
        super.initState();
        WidgetsBinding.instance.addObserver(this);
    }

    @override
    void didChangeDependencies() {
        print('didChangeDependencies');
        super.didChangeDependencies();
    }

    @override
    void didUpdateWidget(LifecycleAppPage oldWidget) {
        print('didUpdateWidget');
        super.didUpdateWidget(oldWidget);
    }

    @override
    void deactivate() {
        print('deactivate');
        super.deactivate();
    }

    @override
    void dispose() {
        print('dispose');
        WidgetsBinding.instance.removeObserver(this);
        super.dispose();
    }

    @override
    void didChangeAppLifecycleState(AppLifecycleState state) {
        switch (state) {
        case AppLifecycleState.inactive:
            print('AppLifecycleState.inactive');
            break;
        case AppLifecycleState.paused:
            print('AppLifecycleState.paused');
            break;
        case AppLifecycleState.resumed:
            print('AppLifecycleState.resumed');
            break;
        case AppLifecycleState.suspending:
            print('AppLifecycleState.suspending');
            break;
        }

        super.didChangeAppLifecycleState(state);
    }

    @override
    Widget build(BuildContext context) {
        print('build');
        return new Scaffold(
        appBar: new AppBar(
            title: new Text('学习'),
            centerTitle: true,
        ),
        body: new OrientationBuilder(
            builder: (context, orientation) {
            return new Center(
                child: new Text(
                '当前计数值:$count',
                style: new TextStyle(
                    color: orientation == Orientation.portrait
                        ? Colors.blue
                        : Colors.red),
                ),
            );
            },
        ),
        floatingActionButton: new FloatingActionButton(
            child: new Text('click'),
            onPressed: () {
                setState(() {
                    count++;
                });
            }),
        );
    }
}

class LifecyclePage extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return new Scaffold(
            body: new LifecycleAppPage(),
        );
    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容