Flutter基础 -- Dart 语言 -- 基础类型

目录

0. 配置

1. 变量

1.1 弱类型

var Object dynamic

1.2 强类型

1.3 使用场景

var 简化定义变量

查询参数定义

返回的实例对象

2. 常量 

final 和 const

2.1 相同点

类型声明可以省略

初始后不能再赋值

不能和 var 同时使用

2.2 不同点

const 需要确定的值

不可变性可传递

内存中重复创建

2.3 使用场景

final 成员变量初始

const 全局参数

3. 数值类型

3.1 数值类型

int

double

num

3.2 十进制、十六进制

3.3 科学计数法

3.4 数值转换

3.5 位运算 & | ^

4. 布尔

4.1 bool

4.2 关于assert

4.3 逻辑运算符和关系运算符

5. 字符串

5.01 单引号或者双引号

5.02 字符串模板

5.03 字符串连接

5.04 转义符号

5.05 取消转义

5.06 搜索

5.07 提取数据

5.08 大小写转换

5.09 裁剪 判断空字符串

5.10 替换部分字符

5.11 字符串创建

6. 日期时间

6.1 声明

6.2 创建时间 UTC

6.3 解析时间 IOS 8601(标准)

6.4 时间增减量

6.5 比较时间

6.6 时间差

6.7 时间戳


因为编写 flutter 用的 dart 语言,所以先学 dart。

博主一路学下来发现对有cc基础的还是很方便哈,目前感觉没什么大的区别。

0. 配置

相关推荐:

使用 VSCode 搭建 Flutter 开发环境 - guangzan - 博客园 (cnblogs.com)

1. 变量

1.1 弱类型

var Object dynamic

如果没有初始值,可以变成任何类型

var a;
// var a = ""; // 一旦赋值,就确定类型,不能随意改动
a = 'ducafecat';
a = 123;
a = true;
a = {'key': 'val123'};
a = ['abc'];print(a);

Object 编译阶段检查类型 , dynamic  编译阶段不检查检查类型

比较 var 与 dynamic、Object

唯一区别 var 如果有初始值,类型被锁定

1.2 强类型

声明后,类型被锁定

String a = 'doucafecat';
int i = 123;
double d = 0.12;
bool b = true;
DateTime dt = new DateTime.now();
List l = [ a, i, d, b, dt];

变量声明后默认都是 null

1.3 使用场景

var 简化定义变量

不用明确变量类型

    var map = <String, dynamic>{};map["image"] = image;map["title"] = title;map["desc"] = desc;

这里不用 var ,就要写成 Map<String, dynamic>

查询参数定义

api 查询通用接口封装的时候,我们一般用动态类型

如一个 api 请求

  Future<Response<T>> get<T>(String path, {Map<String, dynamic> queryParameters,...});

Map<String, dynamic>? queryParameters, 查询参数值是动态

返回的实例对象

如分类实例定义

class Category {int id; // 数字 idString name; // 字符串 分类名称String slug;Category({this.id, this.name, this.slug});...
}

int id; String name; 明确类型

2. 常量 

final 和 const

2.1 相同点

类型声明可以省略

final String a = 'ducafecat';
final a = 'ducafecat';const String a = 'ducafecat';
const a = 'ducafecat';

初始后不能再赋值

final a = 'ducafecat';
a = 'abc'; errconst a = 'ducafecat';
a = 'abc'; err

不能和 var 同时使用

final var a = 'ducafecat'; err
const var a = 'ducafecat'; err

2.2 不同点

const 需要确定的值

final dt = DateTime.now(); const dt = const DateTime.now(); err

不可变性可传递

final List ls = [11, 22, 33];
ls[1] = 44;const List ls = [11, 22, 33];
ls[1] = 44; err

内存中重复创建

final a1 = [11 , 22];
final a2 = [11 , 22];
print(identical(a1, a2)); falseconst a1 = [11 , 22];
const a2 = [11 , 22];
print(identical(a1, a2)); true

identical 通过比较两个引用的是否是同一个对象判断是否相等

2.3 使用场景

final 成员变量初始

final定义成员变量,指的是让变量在构造函数的

  // 本地存储keystatic const storageFirstOpen = 'first_open';static const storageLanguageCode = 'language_code';static const storageThemeCode = 'theme_code';static const storageToken = 'token';static const storageProfile = 'profile';

时候都一次性初始化,好处就是就不会遗漏成员变量

const 全局参数

class PlaceholdWidget extends StatelessWidget {final String? assetImagePath;const PlaceholdWidget({Key? key,this.assetImagePath,}) : super(key: key);@overrideWidget build(BuildContext context) {...}
}

3. 数值类型

3.1 数值类型

int

整数值,其取值通常位于 -253 和 253 之间。

double

64-bit (双精度) 浮点数,符合 IEEE 754 标准。

num

int 和 double 都是 num 的子类。

3.2 十进制、十六进制

3.3 科学计数法

num a = 2e3;
print([a]);[2000]

3.4 数值转换

3.5 位运算 & | ^

这些和c是一样的

4. 布尔

4.1 bool

为了代表布尔值,Dart 有一个名字为 bool 的类型。 只有两个对象是布尔类型的:true 和 false 所创建的对象, 这两个对象也都是编译时常量。

bool a; print(a);

只有 true 对象才被认为是 true。 所有其他的值都是 flase(null也是)。

4.2 关于assert

注意: 断言只在检查模式下运行有效,如果在生产模式 运行,则断言不会执行。

4.3 逻辑运算符和关系运算符

&& || ! 和 != == ...都和c一样的

5. 字符串

5.01 单引号或者双引号

赋值

String a = 'ducafecat';
String b = "ducafecat";

区别 转义分隔符

final myString = 'Bob\'s dog';            // Bob's dog
final myString = "a \"quoted\" word";     // a "quoted" wordfinal myString = "Bob's dog";             // Bob's dog
final myString = 'a "quoted" word';       // a "quoted" wordfinal value = '"quoted"';                 // "quoted"
final myString = "a $value word";         // a "quoted" word

区别就是没啥区别....

5.02 字符串模板

当需要插入一个简单的变量时,可以直接在字符串中使用 $ 符号加上变量名。如果插入的是一个更复杂的表达式,则需要使用 ${} 包裹表达式。

var a = 123;
String b = 'ducafecat : ${a}';
print(b);

5.03 字符串连接

var a = 'hello' + ' ' + 'ducafecat';
var a = 'hello'' ''ducafecat';
var a = 'hello'   ' '     'ducafecat';var a = 'hello'
' '
'ducafecat';var a = '''
hello word
this is multi line
''';var a = """
hello word
this is multi line
""";print(a);

可以直接+,也可以+都不要,''' 和 """ 也非常好用

5.04 转义符号

var a = 'hello word \n this is multi line';
print(a);hello wordthis is multi line

5.05 取消转义

var a = r'hello word \n this is multi line';
print(a);hello word \n this is multi line

就是在前面加了一个 r

5.06 搜索

var a = 'web site ducafecat.tech';
print(a.contains('ducafecat'));
print(a.startsWith('web'));
print(a.endsWith('tech'));
print(a.indexOf('site'));true
true
true
4

5.07 提取数据

var a = 'web site ducafecat.tech';
print(a.substring(0,5));
var b = a.split(' ');
print(b.length);
print(b[0]);web s
3
web

这里b[0]=web就可以发现,切分字符串返回的是一个数组

5.08 大小写转换

var a = 'web site ducafecat.tech';
print(a.toLowerCase());
print(a.toUpperCase());web site ducafecat.tech
WEB SITE DUCAFECAT.TECH

5.09 裁剪 判断空字符串

print('    hello word     '.trim());
print(''.isEmpty);hello word
true

5.10 替换部分字符

print('hello word word!'.replaceAll('word', 'ducafecat'));hello ducafecat ducafecat!

5.11 字符串创建

var sb = StringBuffer();
sb..write('hello word!')
..write('my')
..write(' ')
..writeAll(['web', 'site', 'https://ducafecat.tech']);
print(sb.toString());hello word!my websitehttps://ducafecat.tech

6. 日期时间

6.1 声明

当前时间

var now = new DateTime.now();
print(now);2022-05-28 20:04:43.607

指定年月日

var d = new DateTime(2018, 10, 10, 9, 30);
print(d);2018-10-10 09:30:00.000

6.2 创建时间 UTC

创建 utc 时间

var d = new DateTime.utc(2018, 10, 10, 9, 30);
print(d);2018-10-10 09:30:00.000Z

发现后面跟了个Z,也就是0时区的时间

6.3 解析时间 IOS 8601(标准)

var d1 = DateTime.parse('2018-10-10 09:30:30Z');
print(d1);2018-10-10 09:30:30.000Zvar d2 = DateTime.parse('2018-10-10 09:30:30+0800');
print(d2);2018-10-10 01:30:30.000Z

6.4 时间增减量

var d1 = DateTime.now();
print(d1);
print(d1.add(new Duration(minutes: 5)));
print(d1.add(new Duration(minutes: -5)));2022-05-28 22:09:12.805
2022-05-28 22:14:12.805
2022-05-28 22:04:12.805

6.5 比较时间

var d1 = new DateTime(2018, 10, 1);
var d2 = new DateTime(2018, 10, 10);
print(d1.isAfter(d2));
print(d1.isBefore(d2));false
truevar d1 = DateTime.now();
var d2 = d1.add(new Duration(milliseconds: 30));
print(d1.isAtSameMomentAs(d2));false

6.6 时间差

var d1 = new DateTime(2018, 10, 1);
var d2 = new DateTime(2018, 10, 10);
var difference = d1.difference(d2);
print([difference.inDays, difference.inHours]);[-9, -216]

6.7 时间戳

var now = new DateTime.now();
print(now.millisecondsSinceEpoch);
print(now.microsecondsSinceEpoch);1653747090687
1653747090687000

创作不易,希望读者三连支持 💖
赠人玫瑰,手有余香 💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/19893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性代数|机器学习-P1课程简介

文章目录 1. 书籍下载2. 正文 1. 书籍下载 链接&#xff1a;https://pan.baidu.com/s/1QbK0enLh0x4nU1c4Tqwlkw 提取码&#xff1a;r7ft 本课程回顾线性代数在概率论、统计学、优化和深度学习中的应用。是GILBERT STRANG教授的有一个经典的课程。课程将线性代数分为如下部分&a…

利用“记忆化搜索“解斐波那契数

一、题目描述 求第 n 个斐波那契数。 二、 利用"记忆化搜索"解斐波那契数 什么是记忆化搜索&#xff1f;记忆化搜索就是带有备忘录的递归。 我们先来看一下使用递归来解斐波那契数的这个过程&#xff0c;假设求第5个斐波那契数F(5)。 由图可见&#xff0c;要重复计…

Android加固多渠道打包和签名工具

简介 基于腾讯VasDolly最新版本3.0.6的图形界面衍生版本&#xff0c;同时增加了签名功能&#xff0c;旨在更好的帮助开发者构建多渠道包 使用说明 下载并解压最新工具包&#xff0c;找到Startup脚本并双击启动图形界面&#xff08;注意&#xff1a;需本地安装java环境&#…

手机定制开发_基于天玑900的5G安卓手机定制方案

手机定制方案基于联发科天玑900强劲旗舰八核2.4GHz处理器。这款处理器采用了6nm先进制程工艺&#xff0c;为用户带来了痛快淋漓的性能体验。不论是进行游戏还是日常娱乐&#xff0c;用户都能轻松驾驭。手机搭载了最新的Android 13操作系统&#xff0c;提高了数据读取的准确性&a…

小数第n位【蓝桥杯】

小数第n位 模拟 思路&#xff1a;arr数组用来记录已经出现过的a&#xff0c;在循环时及时退出。易知题目的3位即a%a后的第n-1,n,n1位。该代码非常巧妙&#xff0c;num记录3位的输出状况。 #include<iostream> #include<map> using namespace std; typedef long l…

vulnhub靶场之FunBox-9

一.环境搭建 1.靶场描述 Its a box for beginners, but not easy. Gather careful !!! Hint: Dont waste your time ! Every BruteForce-Attack at all ports can be stopped after 1500 trys per account. Enjoy the game and WYSIWYG ! This works better with VirtualBox…

博士毕业论文/CTEX/LATEX

LATEX环境安装 CTEX 安装 &#xff08;垃圾&#xff0c;不要装&#xff09; 运行 clean.batcomp.bat 缺少字体 Couldn’t find Adobe Heiti S.cfg’ miktex-maketfm: No creation rule for font “Adobe Heiti Std”.解决方法&#xff1a;其实就是下载这四个字体之后&…

【大比武10】行业垂直大模型应用在档案管理中的探索

关注我们 - 数字罗塞塔计划 - # 大比武2024 本篇是参加“华夏伟业”杯第二届档案信息化公司业务与技术实力大比武&#xff08;简称“大比武 2024”&#xff09;的投稿文章&#xff0c;来自广州龙建达电子股份有限公司&#xff0c;作者&#xff1a;陶宣任。 在这个人工智能技…

深入理解flask规则构建与动态变量应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、Flask规则基础 1. 静态规则与动态规则 2. 规则语法与结构 三、动态变量应用…

CISCN 2022 初赛 ez_usb

还是从第一个 URB向后看 发现 同时 存在 2.8.1 2.10.1 2.4.1 但是显然 2.4.1 是7个字节 不满足 usb流量要求 只考虑 2.8.1 和 2.10.1 tshark -r ez_usb.pcapng -T json -Y "usb.src \"2.8.1\"" -e usbhid.data > 281.json 正常取数据即可 import js…

【vue】v-for只显示前几个数据,超出显示查看更多

v-for只显示前几个数据&#xff0c;超出显示查看更多 如图 <div v-for"(item,index) in list.slice(0,3)" :key"index"><div class"degreeNo" :class"index0?noOne:index1?noTwo:index2?noThree:"> NO{{index1}}:<…

读《Diffusion Models: A Comprehensive Survey of Methods and Applications》综述

读《Diffusion Models: A Comprehensive Survey of Methods and Applications》综述 关于此文&#xff0c;我的一个见解想法&#xff0c;重点关注他怎么描述 「Diffusion Model」的引用的&#xff0c;以及未来方向就好了。当然从这篇文章可以知道 「Diffusion Model」的一个基石…

HR人才测评,企业人才综合素质测评?

HR企业人才综合素质测评是一种评估企业人才综合素质的方法。该测评方法通过对人才的综合能力、专业技能、沟通协调能力、团队合作能力、领导管理能力等方面进行评估&#xff0c;以期为企业提供更全面、更客观、更科学的人才选拔和管理的依据。 点击这里了解&#xff1a;『企业…

强化学习的应用场景:何时使用强化学习?

RL 强化学习的应用场景&#xff1a;何时使用强化学习&#xff1f;强化学习的基本原理适用场景1. 连续决策过程2. 不完全信息3. 动态环境4. 长期回报优化5. 无明确监督信号 实际案例游戏AI机器人控制自主驾驶金融交易推荐系统 结论 强化学习的应用场景&#xff1a;何时使用强化学…

免费生物蛋白质的类chatgpt工具助手copilot:小分子、蛋白的折叠、对接

参考: https://310.ai/copilot 可以通过自然语言通话晚上蛋白质的相关处理:生成序列、折叠等 应该是agent技术调用不同工具实现 从UniProt数据库中搜索和加载蛋白质。使用ESM Fold方法折叠蛋白质。使用310.ai基础模型设计新蛋白质。使用TM-Align方法比较蛋白质。利用Protei…

整合框架(spring...) 统一异常处理

1、 我们想让异常结果也显示为统一的返回结果对象&#xff0c;并且统一处理系统的异常信息&#xff0c;那么需要统一异常处理。 附加&#xff1a;创建封装错误状态码和错误消息VO 代码如下&#xff1a; Result import io.swagger.v3.oas.annotations.media.Schema; impo…

MOE模型入门

一、目录 定义&#xff1a;MOE架构代表类型如何解决expert 平衡的&#xff1f;而不是集中到某一专家。如何训练、微调MOE模型&#xff1f;基础架构优缺点不同MOE 模型实现方式、训练方法 二、实现 定义&#xff1a;MOE架构 MOE:混合专家模型&#xff0c;多个专家共同决策的模…

Redis 探索之旅(进阶)

目录 今日良言&#xff1a;从不缺乏从头开始的勇气 一、持久化 1、RDB 2、AOF 二、Redis 的事务 三、主从复制 四、哨兵模式 五、集群模式 六、缓存 七、分布式锁 今日良言&#xff1a;从不缺乏从头开始的勇气 一、持久化 持久化就是把数据存储在硬盘上&#xff0c;无…

CUDA学习(2)

什么是CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;&#xff0c;统一计算设备架构&#xff0c;英伟达推出的基于其GPU的通用高性能计算平台和编程模型。 借助CUDA&#xff0c;开发者可以充分利用英伟达GPU的强大计算能力加速各种计算任务。 软件生…

保险 - day12 时序数据库influxdb

时序数据库 时序数据库是近几年一个新的概念&#xff0c;与传统的Mysql关系型数据库相比&#xff0c;它的最大的特点是&#xff1a;数据按照时间顺序存储。举例来说&#xff0c;日志数据&#xff0c;是以时间顺序存储的&#xff0c;所以用时序数据库存储是一种很好的选择。使用…