Flutter 组件化编程

作者: iwakevin | 来源:发表于2018-12-05 13:47 被阅读92次

组件化编程就像是搭积木一样的开发。把整个应用拆分成许多部分,每部分各自管理自己的组件以及数据状态,这样达到一个更好的可维护性,可扩展性。

对于组件来说,大致会分为几个类型的组件:

  • 展示组件:展示型组件并不维护数据状态,它更多的作用是用来展示效果与数据。
  • 容器组件:容器组件并不涉及 UI 方面,而是负责处理数据与状态。
  • 布局组件:特定的布局方式,建议是把它们封装成一个布局组件。
  • 页面组件:页面组件负责当前页面的组件结构。因为一个页面是由很多组件组成的,它们的数据关系如何?布局如何?都是在页面组件上处理。

状态(State)

前面说了 Flutter 借鉴 React,定义出了一套 Widget。因此在 Widget 里也有 State 的概念。

在 React 里的 State 的作用同样也适用与 Flutter。

class StateWrap extends StatefulWidget {
    @override
    createState() => new MyComponent();
}

class MyComponent extends State<StateWrap> {
    String text = 'Hello, world!';

    @override
    Widget build(BuildContext context) {
        return new Center(
            child: new Text(this.text),
        );
    }
}

有一点需要注意的,首先需要一个编写一个包装类,它继承至 StatefulWidget,实现 createState 方法。

在 Dart 里,带下划线开头的变量是私有变量,一般会把 State 设置为私有变量。其外在类的属性是可以不使用 this 的。对于 State 的更新,Flutter 也是使用 setState。不同的是,setState 接受的不是对象,而是一个回调函数,在这个回调函数里对 State 的更改会直接响应式的影响 UI。

class StateWrap extends StatefulWidget {
    @override
    createState() => new MyComponent();
}

class MyComponent extends State<StateWrap> {
    String _text = 'Hello, world!';

    void update() {
        // 更新 State
        this.setState(() {
            _text = 'Hello';
        });
    }

    @override
    Widget build(BuildContext context) {
        return new Center(
            child: new Text(_text),
        );
    }
}

属性(Props)

在 React 里有 Props 的概念,同样的在 Flutter 也有 Props 的概念。State 与 Props 是可以共存的,因为 State 需要使用一个 StatefulWidget 包装,因此会比较麻烦。

Props 的定义在 StatefulWidget 里定义,并且在 createState 里传递。在 State 里通过 widget.xxx 获取值。

class StateWrap extends StatefulWidget {
    final String title;
    final Function onPress;
    StateWrap({this.title, this.onPress});

    @override
    createState() => new MyComponent(title: title, onPress: onPress);
}

class MyComponent extends State<StateWrap> {
    // props 从 widget.xxx 获取
    @override
    Widget build(BuildContext context) => new Center(
        child: new Column(
            children: <Widget>[
                new Text(widget.title),
                new FlatButton(child: const Text('Press'), onPressed: widget.onPress),
            ],
        ),
    );
}

使用的时候,也非常的简单。

new MyComponent(title: 'abc', onPress: () {
    // ...
})

在 React 里,遍历数组的时候,通常会有一些上下文信息传递给事件,同样在 Flutter 也是如此类似。

onPressed: () => this.onPress(this.title)

相关文章

  • Flutter 组件化编程

    组件化编程就像是搭积木一样的开发。把整个应用拆分成许多部分,每部分各自管理自己的组件以及数据状态,这样达到一个更好...

  • Flutter组件化

    使用Flutter Module实现组件化的思路:Flutter组件化[https://juejin.cn/pos...

  • 如何实现 Flutter 与原生的混合开发方式?详解Flutte

    为了把 Flutter 引入到原生工程,我们需要把 Flutter 工程改造为原生工程的一个组件依赖,并以组件化的...

  • Vue 组件化开发

    组件化开发思想 现实中的组件化思想体现(1)标准(2)分治(3)重用(4)组合 编程中的组件化思想体现 组件化规范...

  • 组件化

    编程与算法训练与 组件化 Proxy 与双向绑定 组件化: 组件的基本知识,轮播组件 对象与组件 对象包含的内容 ...

  • Flutter(十二)混合栈开发-组件化Flutter工程

    Flutter混合栈开发 组件化Flutter工程 Flutter本身就是为了在移动端上提供一个快速开发的技术方案...

  • Flutter混合栈开发-组件化Flutter工程

    Flutter混合栈开发 组件化Flutter工程 Flutter本身就是为了在移动端上提供一个快速开发的技术方案...

  • flutter组件化调研

    一、组件化接入方式 跟原生组件化类似,共有两种方式接入:pod和framework怎么配置flutter环境,fl...

  • 谈谈前端组件化

    一、什么是组件化 什么是组件化?不同的人对组件化有着不同理解,我理解的组件化是一种编程思想,是一种拆分代码的方式。...

  • Flutter - UI基础

    Flutter基础组件用Flutter构建漂亮的UI界面 - 基础组件篇Flutter滚动型容器组件 - List...

网友评论

    本文标题:Flutter 组件化编程

    本文链接:https://www.haomeiwen.com/subject/vpgicqtx.html