一个完整的flutter组件开发的过程
admin
2024-01-31 15:31:15

        首先统一一个概念,不管是component(组件),widget(控件),module(android的模块)在我的理解能力范围内,都是为了抽离某个特定的功能,对外接受参数,对内实现功能的某一个代码块。

        它是一个颗粒化的实体,是相对于建筑物的钢筋,水泥,砖头。他们个有特点,相互独立,各有特性,同时又提供了某种可以内聚融合的对外接口。component(组件),widget(控件)下面都统称组件,对component,widget有不同理解的朋友,希望能在评论区收到你们的见解和建议。

        在前端开发中,不管vue,react,jquery,原生(html,js,css组合)都提供了或可封装组件的功能。那其它们都是存在共性的,只有深入浅出之后,抽象出这种通用的概念,我们才可以轻松的在不同的框架,语言之中,快速实现我们所想要的功能。

        那为什么今天会记录一下flutter的组件开发呢?因为我需要用flutter的方式去实现一个component。flutter是我不熟悉的一个ui框架。那些已经抽象出来的组件概念,需要使用flutter框架以及dart语言特性去把它实现出来。

熟悉vue,react的童鞋们,对组件可以会有一下的一些概念:

  • 1,组件要接受prop
  • 2,组件要有默认的prop
  • 3,组件内部有自己维护的变量
  • 4,组件的prop可选
  • 5,组件的prop有特定的值,如果不匹配到的属性值无效(枚举)
  • 6,组件同一个prop属性的不同值会有不同的样式(例如antd button的type)
  • 7,组件的多个prop会组成不同的样式 例如antd button的type和status(warn,danger,loading)
  • 8,组件有必传的prop
  • 9,组件有可选的且无默认值的prop

那接下来我们用flutter一步步的实现上面的功能

【3,组件内部有自己维护的变量】

所以这个组件是个有自己状态的组件,所以要继承StatefulWidget

【1,组件要接受prop】

【2,组件要有默认的prop;】

代码如下:

class Button extends StatefulWidget {double height = 48;//默认propState

【8,组件有必传的prop】,text参数必传

class Button extends StatefulWidget {final String text;Button({super.key,required this.text});State

【9,组件有可选的且无默认值的prop】,okTxt可选

【4,组件的prop可选】

class Button extends StatefulWidget {final String? okTxt;Button({super.key,this.okTxt});State

Oktext使用实话判断是否为null即可

【6,组件同一个prop属性的不同值会有不同的样式(例如antd button的type)】

【7,组件的多个prop会组成不同的样式 例如antd button的type和status(warn,danger,loading)】

这两个更多是内部逻辑,根据特定的prop来重新赋值内部状态的其他变量的值,这两个变量一般是用枚举的方式让外面传入

//按钮类型:默认,边框,危险,文字enum Type { primary, dashed, warn, text }//按钮状态:默认,加载中,禁用,点击中enum Status { primary, loading, disabled }class Button extends StatefulWidget {Type type = Type.primary;Status status = Status.primary;Color color =Colors.red;Button({super.key,this.type = Type.primary,this.status = Status.primary,required this.text});}class _ButtonState extends State

最后一个疑问?_ButtonState是干嘛的,它内部如何访问Button内声明的变量呢?

        _ButtonState是一个提供可访问该组件的生命周期和实现组件具体页面渲染内容的类,而不只是state管理。只是名字看起来让人感觉像是vue的vuex或者react的state,也有可能页面渲染dom在StatefulWidget内也算是个状态吧。

通过widget[变量名](例如widget.type)的方式可以访问到Button class的内部申明的变量(prop)

到此为止,如果能够理解上面的概念,就可以使用flutter写出一个满足日常工作需要的基础组件。

附加一个内容,如果组件需要用到动画,那需用用到混入,用过vue的童鞋可以很容易理解。flutter通过width的语句来混入其他功能,代码:

class _ButtonState extends State

相关内容

热门资讯

从哈尔滨到长白山闺蜜5天4晚天... 从哈尔滨到长白山闺蜜5天4晚天池+延吉边境:拍照打卡真实体验 一、出发前的纠结:比老板还难搞的攻略,...
搭上低空经济、AI文旅?两连板... 来源:e公司 桂林旅游(000978)回应市场热点。 9月8日,桂林旅游再度涨停,斩获2连板。当天晚...
八达岭长城国庆怎么去最省心?坐... 八达岭长城是来北京必去的景点之一,尤其是第一次来北京的游客。但国庆期间去八达岭,最大的挑战不是爬长城...
秋日睦邻游园会热闹开锣!居民重... (来源:上观新闻) 近日,殷行街道包头路社区睦邻活动室里,举办了一场秋日睦邻趣味游园会,辖区居民、户...
带父母去长白山怎么玩?3天2晚... 带父母去长白山怎么玩?3天2晚天池攻略,有些坑帮你们踩过了 一句话总结:这次带父母去长白山,我选了黑...