Flutter枚举
Flutter枚举
Enum Extension
在Dart2.7版本,Dart新增了扩展函数,使枚举相关的代码定义、调用更加简洁
通过扩展枚举定义方法
定义一个元素枚举
enum Element { hydrogon, carbon, oxide }
定义一个枚举扩展,通过switch case获取每个元素的相对原子质量和中文描述
extension ElementExtension on Element {
int get number {
switch (this) {
case Element.hydrogon:
return 1;
case Element.carbon:
return 6;
case Element.oxide:
return 8;
}
}
String get description {
switch (this) {
case Element.hydrogon:
return '氢气';
case Element.carbon:
return '碳';
case Element.oxide:
return '氧气';
}
}
定义一个静态方法来通过相对原子质量获取
static Element fromNumber(int number) {
switch (number) {
case 1:
return Element.hydrogon;
case 6:
return Element.carbon;
case 8:
return Element.oxide;
default:
return Element.oxide;
}
}
增强枚举类型
在Flutter 3.0 发布之后,直接在枚举构造方法内部定义相关属性,枚举值声明处进行声明即可
在pubspec.yaml文件中须将sdk版本设置为大于2.17.0
定义一个动物枚举,并定义成员变量name和weight和构造函数
enum Animal {
const Animal({required this.name, required this.weight});
final String name;
final int weight;
}
创建枚举类型dog和cat
dog(name: 'dog', weight: 20),
cat(name: 'cat', weight: 6);
通过name和weight获取枚举类型
factory Animal.fromName(String name) {
return Animal.values.firstWhere((element) => element.name == name);
}
factory Animal.fromWeight(int weight) {
return Animal.values.firstWhere((element) => element.weight == weight);
}
这里直接构造了两个工厂函数,接收name或者weight参数,通过遍历Animal的values,筛选出和参数相同的枚举类型并返回
也可以通过静态方法的方式
static Animal fromNameStatic(String name) {
return Animal.values.firstWhere((element) => element.name == name);
}
static Animal fromWeightStatic(int weight) {
return Animal.values.firstWhere((element) => element.weight == weight);
}
创建枚举并访问成员变量
const dog = Animal.dog;
log(dog.name);
log(dog.weight.toString());
定义toJson方法将枚举类型的所有信息打印
Map<String, dynamic> toJson() {
return {'name': name, 'weight': weight};
}
完整代码
enum Animal {
dog(name: 'dog', weight: 20),
cat(name: 'cat', weight: 6);
const Animal({required this.name, required this.weight});
factory Animal.fromName(String name) {
return Animal.values.firstWhere((element) => element.name == name);
}
factory Animal.fromWeight(int weight) {
return Animal.values.firstWhere((element) => element.weight == weight);
}
static Animal fromNameStatic(String name) {
return Animal.values.firstWhere((element) => element.name == name);
}
static Animal fromWeightStatic(int weight) {
return Animal.values.firstWhere((element) => element.weight == weight);
}
Map<String, dynamic> toJson() {
return {'name': name, 'weight': weight};
}
final String name;
final int weight;
}
Dart2.7之前
在Dart 2.7 的扩展函数发布之前,一般是新建一个顶级函数/工具类内部函数,使用swtich case来返回枚举值对应的关联数据
String getName(Animal animal) {
switch (animal) {
case Animal.dog:
return 'dog';
case Animal.cat:
return 'cat';
}
}
反之亦然
Animal getType(String name) {
switch (name) {
case 'dog':
return Animal.dog;
case 'cat':
return Animal.cat;
default:
return Animal.dog;
}
}
Flutter枚举的更多相关文章
- flutter输入颜色枚举卡顿假死
AndroidStudio 3.3.2 遇到 flutter输入颜色枚举卡顿假死,目前没好的解决方案,可以设置显示时间或者关闭popup窗口显示文档,这样就不会卡顿了 下面示例代码在输入 Colors ...
- Flutter的输入框TextField
TextFiled组件的API 先来看一下TextFiled的构造方法: const TextField({ Key key, this.controller, this.focusNode, thi ...
- flutter的webview案例
flutter 加载webview 安装插件 flutter_webview_plugin: ^0.2.1 从listview点击item跳转页面加载详情页案例 import 'dart:async ...
- Flutter 布局(七)- Row、Column详解
本文主要介绍Flutter布局中的Row.Column控件,详细介绍了其布局行为以及使用场景,并对源码进行了分析. 1. Row A widget that displays its children ...
- Flutter学习笔记(二)
*.assets 当引用图片的时候,需要在pubspec.yaml的文件中的flutter下添加assets,类似于下面的样子: image.png 这里需要注意的是文件里的assets只要一个缩进即 ...
- Flutter的原理及美团的实践
导读 Flutter是Google开发的一套全新的跨平台.开源UI框架,支持iOS.Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件.自从2017年5月发布第一个版本以来,目前 ...
- flutter自定义View(CustomPainter) 之 canvas的方法总结
画布canvas 画布是一个矩形区域,我们可以控制其每一像素来绘制我们想要的内容 canvas 拥有多种绘制点.线.路径.矩形.圆形.以及添加图像的方法,结合这些方法我们可以绘制出千变万化的画面. 虽 ...
- Flutter学习笔记(8)--Dart面向对象
如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...
- Flutter 基础控件
内容: Button Image.Icon Switch.Checkbox TextField Form 1.Button RaisedButton 漂浮按钮 FlatButton 扁平按钮 Outl ...
- Flutter学习笔记(6)--Dart流程控制语句
如需转载,请注明出处:Flutter学习笔记(5)--Dart流程控制语句 条件语句:if.if...elseif.if...elseif...else ; ) { print('优秀'); } &g ...
随机推荐
- Hive--hbase--spark
hive创建hbase表 create external table events.hb_train( row_key string, user_id string, event_id string, ...
- 【赵渝强老师】使用Oracle的跟踪文件
一.什么是跟踪文件? 跟踪文件中包含了大量而详细的诊断和调试信息.通过对跟踪文件的解读和分析,我们可以定位问题.分析问题和解决问题.从跟踪文件的产生的来源来看,跟踪文件又可以分为两类:一类是数据库的操 ...
- SpringBoot项目使用yml文件链接数据库异常
SpringBoot使用properties连接数据库时没有出现问题 SpringBoot使用yml连接数据库时出现:Unable to connect to Redis 并在报错信息中出现: 发现是 ...
- map,unordered_map,multimap,unordered_multimap
std::map(有序映射) std::unordered_map(无序映射) std::multimap(有序多重映射) std::unordered_multimap(无序多重映射) 它们的使用方 ...
- argmax经过sigmoid和不经过sigmoid区别
起因 今天和同组讨论了一下网络输出时,在torch.argmax之前经过torch.sigmoid和不经过sigmoid的区别. 主要起因是实验结果图像不同 图1 不经过sigmoid 图2 经过si ...
- 开源项目更新|WPF/Uno Platform/WinUI 3三个版本的《英雄联盟客户端》
哈喽大家好! 我们是中韩Microsoft MVP夫妇 Vicky&James^^很高兴能加入博客园和大家分享我们的技术! 自2008年以来,我们一直深耕于WPF技术,积累了丰富的经验.这 ...
- C# Webapi Filter 过滤器 - 生命周期钩子函数 - Action Filter 基础
ACTION Filter IAsyncACtionFilter 接口 : 1.注入ActionFilter // 注册过滤器 builder.Services.Configure<MvcOpt ...
- KubeSphere 社区双周报 | KubeKey 新增网络插件 Hybridnet | 2023.08.18-08.31
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- GaussDB: db2->gaussdb 函数转换
一.db2->gaussdb函数转换 问题描述:使用GaussDB替代DB2的方案,使用起来还是有些差别,做一下函数的映射转换. DB2写法 GaussDB改写语法 日期函数 days(OU ...
- 原子操作类Atomic
原子操作的基本数据类型 基本类型的原子操作主要有这些: AtomicBoolean:以原子更新的方式更新 boolean: AtomicInteger:以原子更新的方式更新 Integer; Atom ...