一个完整的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

相关内容

热门资讯

新质新格局,景芝白酒再次点亮黄... 11月18日,备受瞩目的2025年第六届中国白酒黄淮核心产区高质量发展峰会在淄博举办。本届峰会以“新...
今日播出|丝路陕茶 千年留香 播出时间:农林卫视《农村大市场》11月19日22:05 丝路陕茶 千年留香 陕西是我国最早种茶、出产...
纠结有什么好吃的零食品牌推荐?... 在快节奏的现代生活中,零食早已超越了单纯的充饥角色,转而成为我们慰藉味蕾、补充能量、甚至分享快乐的重...
吃巧克力能缓解甲状腺相关疲劳? 一、甲状腺相关疲劳的核心成因 要判断巧克力能否缓解甲状腺相关疲劳,首先需要明确这种疲劳的根源。甲状腺...
暖乎乎的酒酿南瓜丸子羹,一口甜... 秋冬最治愈的家常甜汤,必须提名酒酿南瓜丸子羹!金黄的南瓜丸子软乎乎,裹着清甜的酒酿汤汁,一口下去暖到...