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; // 数字 id
  String 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'; err

const 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)); false

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

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

2.3 使用场景

final 成员变量初始

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

  // 本地存储key
  static 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);

  @override
  Widget 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" word

final myString = "Bob's dog";             // Bob's dog
final myString = 'a "quoted" word';       // a "quoted" word

final 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 word
 this 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.000Z

var 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
true

var 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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【GD32】04 - Timer定时器

GD32中的定时器 GD32E230中有七个定时器&#xff0c;六种类型&#xff0c;其中通用的L4版本有两个&#xff0c;其他类型的各一个。 那我们就以通用L4这个类型来敲代码&#xff0c;其他流程是通用的。 通用L4 虽然每种类型的定时器都有自己的结构框图&#xff0c;但是其实大差…

第十八节:认识一些经典递归过程

一 暴力递归就是尝试 1&#xff0c;把问题转化为规模缩小了的同类问题的子问题 2&#xff0c;有明确的不需要继续进行递归的条件(base case) 3&#xff0c;有当得到了子问题的结果之后的决策过程 4&#xff0c;不记录每一个子问题的解 二 打印n层汉诺塔从最左边移动到最右边的全…

【STM32】定时器与PWM的LED控制

目录 一、要求二、定时器中断与PWM介绍1、定时器类型2、定时器中断基本结构3、预分频器时序与计数器时序&#xff08;1&#xff09;预分频器时序&#xff08;2&#xff09;计数器时序 3、PWM&#xff08;1&#xff09;简介&#xff08;2&#xff09;输出比较模式&#xff08;3&…

密闭空间作业应如何做好安全防护?

在现代工业与日常工作中&#xff0c;密闭空间作业已逐渐成为许多行业不可或缺的一部分。然而&#xff0c;这些看似寻常的空间却隐藏着诸多不为人知的风险。从窒息性气体到易燃易爆物质&#xff0c;从物理性危险到心理压力&#xff0c;每一项都足以威胁到作业人员的生命安全。因…

【Qt】【模型-视图架构】代理模型示例

文章目录 1. 基本排序/过滤模型Basic Sort/Filter Model Example2. 自定义排序/过滤模型Custom Sort/Filter Model ExampleFilterLineEdit类定义及实现MySortFilterProxyModel类定义及实现 1. 基本排序/过滤模型Basic Sort/Filter Model Example 官方提供的基本排序/过滤模型示…

004 仿muduo实现高性能服务器组件_Buffer模块与Socket模块的实现

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言Buffer模块Socket模块 小结 前言 这章将会向你介绍仿muduo高性能服务器组件的buffer模块与socket模块的实…

打造你的首个QT 5计算器应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;QT 5的力量与我们的计算器 二、QT 5基础&#xff1a;理解UI设计与文件…

mac安装allure及allure:command not fund问题解决

一、下载 下载连接&#xff1a;https://github.com/allure-framework/allure2/releases 选择任意压缩包进行下载 二、解压 解压后是一个文件夹 三、打开终端 # bash终端 vim ~/.bash_profile # zsh终端 vim ~/.zshrc四、配置环境变量 export PATH/usr/bin:/bin:/usr/sb…

「浏览器」服务端渲染

前言 服务端渲染&#xff08;Server-Side Rendering&#xff0c;SSR&#xff09;是一种常见于网页应用的技术&#xff0c;它指的是在服务器上将网页的内容生成&#xff0c;然后发送完整的HTML页面到客户端的浏览器的过程。这与传统的客户端渲染&#xff08;Client-Side Render…

LC 旋转 - 模拟对象

原文链接 链接 液晶 (LC) 旋转网格属性允许您以 theta、phi 为单位指定空间变化的 LC 导向。 液晶由杆状分子结构组成&#xff0c;这些分子结构具有相对于长轴的旋转对称性。因此&#xff0c;液晶具有空间变化的单轴光学特性。 相对于分子长轴和分子短轴的折射率称为非寻常 ne …

STM32使用ST-LINK下载程序中需要注意的几点

使用keil5的ST-link下载界面 前提是ST-LINK已经连接好&#xff0c;&#xff08;下图中是没有连接ST-link设备&#xff09;&#xff0c;只是为了展示如何查看STlink设备是否连接的方式 下载前一定设置下载完成后自启动 这个虽然不是必须&#xff0c;但对立即看到新程序的现象…

python爬取每日天气情况

python爬取每日天气情况 一、项目简介二、完整代码一、项目简介 本次爬取的目标数据来源于天气网,数据所在的页面如下图所示,本次任务较为简单,按照正常操作流程操作即可,即抓包分析数据接口,发送请求获取数据,解析数据并持久化存储。发送请求使用requests库,解析数据使…

2.11 下载安装Oracle数据库(Win10 JP)

2.11 下载安装Oracle数据库 目录一、下载Oracle 11g客户端安装包1. 官网选数据库配置2. Oracle下载器 下载安装包 二、 安装Oracle 11g客户端1. 安装 Oracle Database Client 11.2.0.1.02. 安装 Oracle Database 11.2.0.4.0 for HP OpenVMS Itanium 三、下载Oracle 12c数据库安…

三相智能电表通过Modbus转Profinet网关与PLC通讯案例

Modbus转Profinet网关&#xff08;XD-MDPN100/300&#xff09;的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议&#xff0c;支持Modbus RTU主站/从站&#xff0c;并可以与RS485接口的设备&#xff0c;它自带网…

C盘文件被格式化了,要怎么恢复?

C盘通常是操作系统(如Windows)的默认安装目录。它包含了操作系统的核心文件、驱动程序及系统所需的各种支持文件。这些文件对于计算机的正常运行至关重要。但在使用的过程中&#xff0c;有时可能会因为各种原因导致C盘被格式化&#xff0c;从而丢失了这些重要文件。这无疑是一个…

定个小目标之每天刷LeetCode热题(5)

今天这是一道简单题&#xff0c;解决方法是递归&#xff0c;遍历二叉树最简便的方法就是递归了&#xff0c;我们以递归三大要素对此题进行简单分析一下 第一要素&#xff1a;明确你这个函数想要干什么 在这道题中&#xff0c;我们需要定义一个传入任意二叉树根节点可以左右翻…

【移动端】商场项目路由设计

1&#xff1a;路由设计配置&#xff1a; 一级路由配置 分析项目&#xff0c;设计路由&#xff0c;配置一级路由 一级路由&#xff1a;单个页面独立展示的&#xff0c;都是一级路由&#xff0c;例如&#xff1a;登录页面&#xff0c;首页架子&#xff0c;报错页面 二级路由&…

Java项目对接redis,客户端是选Redisson、Lettuce还是Jedis?

JAVA项目对接redis&#xff0c;客户端是选Redisson、Lettuce还是Jedis&#xff1f; 一、客户端简介1. Jedis介绍2. Lettuce介绍3. Redisson介绍 二、横向对比三、选型说明 在实际的项目开发中&#xff0c;对于一个需要对接Redis的项目来说&#xff0c;就面临着选择合适的Redis客…

基于Vue+Node.js的购物网站设计与实现-计算机毕业设计源码28500

摘 要 近年来&#xff0c;随着移动互联网的快速发展&#xff0c;电子商务越来越受到网民们的欢迎&#xff0c;电子商务对国家经济的发展也起着越来越重要的作用。简单的流程、便捷可靠的支付方式、快捷畅通的物流快递、安全的信息保护都使得电子商务越来越赢得网民们的青睐。现…

将局部变量指针传递给某个c++类,离开类时数据发生变化

最近遇到一个c的问题&#xff0c;将一个局部变量的值传递给某个类&#xff0c;类中没有对该数据进行任何显式修改&#xff0c;结果该变量的值发生变化并且不可访问。 我开始很奇怪为何会发生这样的事情&#xff0c;后来经过调试&#xff0c;发现原来是该类发生了异常&#xff…