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

目录

[0. 配置](#0. 配置)

[1. 变量](#1. 变量)

[1.1 弱类型](#1.1 弱类型)

[var Object dynamic](#var Object dynamic)

[1.2 强类型](#1.2 强类型)

[1.3 使用场景](#1.3 使用场景)

[var 简化定义变量](#var 简化定义变量)

查询参数定义

返回的实例对象

[2. 常量](#2. 常量)

[final 和 const](#final 和 const)

[2.1 相同点](#2.1 相同点)

类型声明可以省略

初始后不能再赋值

[不能和 var 同时使用](#不能和 var 同时使用)

[2.2 不同点](#2.2 不同点)

[const 需要确定的值](#const 需要确定的值)

不可变性可传递

内存中重复创建

[2.3 使用场景](#2.3 使用场景)

[final 成员变量初始](#final 成员变量初始)

[const 全局参数](#const 全局参数)

[3. 数值类型](#3. 数值类型)

[3.1 数值类型](#3.1 数值类型)

int

double

num

[3.2 十进制、十六进制](#3.2 十进制、十六进制)

[3.3 科学计数法](#3.3 科学计数法)

[3.4 数值转换](#3.4 数值转换)

[3.5 位运算 & | ^](#3.5 位运算 & | ^)

[4. 布尔](#4. 布尔)

[4.1 bool](#4.1 bool)

[4.2 关于assert](#4.2 关于assert)

[4.3 逻辑运算符和关系运算符](#4.3 逻辑运算符和关系运算符)

[5. 字符串](#5. 字符串)

[5.01 单引号或者双引号](#5.01 单引号或者双引号)

[5.02 字符串模板](#5.02 字符串模板)

[5.03 字符串连接](#5.03 字符串连接)

[5.04 转义符号](#5.04 转义符号)

[5.05 取消转义](#5.05 取消转义)

[5.06 搜索](#5.06 搜索)

[5.07 提取数据](#5.07 提取数据)

[5.08 大小写转换](#5.08 大小写转换)

[5.09 裁剪 判断空字符串](#5.09 裁剪 判断空字符串)

[5.10 替换部分字符](#5.10 替换部分字符)

[5.11 字符串创建](#5.11 字符串创建)

[6. 日期时间](#6. 日期时间)

[6.1 声明](#6.1 声明)

[6.2 创建时间 UTC](#6.2 创建时间 UTC)

[6.3 解析时间 IOS 8601(标准)](#6.3 解析时间 IOS 8601(标准))

[6.4 时间增减量](#6.4 时间增减量)

[6.5 比较时间](#6.5 比较时间)

[6.6 时间差](#6.6 时间差)

[6.7 时间戳](#6.7 时间戳)


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

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

0. 配置

相关推荐:

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

1. 变量

1.1 弱类型

var Object dynamic

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

Dart 复制代码
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 强类型

声明后,类型被锁定

Dart 复制代码
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 简化定义变量

不用明确变量类型

Dart 复制代码
    var map = <String, dynamic>{};
    map["image"] = image;
    map["title"] = title;
    map["desc"] = desc;

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

查询参数定义

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

如一个 api 请求

Dart 复制代码
  Future<Response<T>> get<T>(
    String path, {
    Map<String, dynamic> queryParameters,
    ...
  });

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

返回的实例对象

如分类实例定义

Dart 复制代码
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 相同点

类型声明可以省略

Dart 复制代码
final String a = 'ducafecat';
final a = 'ducafecat';

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

初始后不能再赋值

Dart 复制代码
final a = 'ducafecat';
a = 'abc'; err

const a = 'ducafecat';
a = 'abc'; err

不能和 var 同时使用

Dart 复制代码
final var a = 'ducafecat'; err
const var a = 'ducafecat'; err

2.2 不同点

const 需要确定的值

Dart 复制代码
final dt = DateTime.now(); 

const dt = const DateTime.now(); err

不可变性可传递

Dart 复制代码
final List ls = [11, 22, 33];
ls[1] = 44;

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

内存中重复创建

Dart 复制代码
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定义成员变量,指的是让变量在构造函数的

Dart 复制代码
  // 本地存储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 全局参数

Dart 复制代码
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 科学计数法

Dart 复制代码
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 单引号或者双引号

赋值

Dart 复制代码
String a = 'ducafecat';
String b = "ducafecat";

区别 转义分隔符

Dart 复制代码
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 字符串模板

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

Dart 复制代码
var a = 123;
String b = 'ducafecat : ${a}';
print(b);

5.03 字符串连接

Dart 复制代码
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 转义符号

Dart 复制代码
var a = 'hello word \n this is multi line';
print(a);

hello word
 this is multi line

5.05 取消转义

Dart 复制代码
var a = r'hello word \n this is multi line';
print(a);

hello word \n this is multi line

就是在前面加了一个 r

5.06 搜索

Dart 复制代码
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 提取数据

Dart 复制代码
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 大小写转换

Dart 复制代码
var a = 'web site ducafecat.tech';
print(a.toLowerCase());
print(a.toUpperCase());

web site ducafecat.tech
WEB SITE DUCAFECAT.TECH

5.09 裁剪 判断空字符串

Dart 复制代码
print('    hello word     '.trim());
print(''.isEmpty);

hello word
true

5.10 替换部分字符

Dart 复制代码
print('hello word word!'.replaceAll('word', 'ducafecat'));

hello ducafecat ducafecat!

5.11 字符串创建

Dart 复制代码
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 声明

当前时间

Dart 复制代码
var now = new DateTime.now();
print(now);

2022-05-28 20:04:43.607

指定年月日

Dart 复制代码
var d = new DateTime(2018, 10, 10, 9, 30);
print(d);

2018-10-10 09:30:00.000

6.2 创建时间 UTC

创建 utc 时间

Dart 复制代码
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(标准)

Dart 复制代码
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 时间增减量

Dart 复制代码
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 比较时间

Dart 复制代码
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 时间差

Dart 复制代码
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 时间戳

Dart 复制代码
var now = new DateTime.now();
print(now.millisecondsSinceEpoch);
print(now.microsecondsSinceEpoch);

1653747090687
1653747090687000

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

相关推荐
朝阳眯眼16 分钟前
Android 集成OpenCV
android·人工智能·opencv
JerryHe1 小时前
Android 常用文件系统命令
android·文件系统·常用命令·分区修复
非正式程序猿3 小时前
Android 权限申请分享
android
小菜琳4 小时前
Android系统adb shell dumpsys activity processes
android
ChatMoneyAI5 小时前
php简单的单例模式
android·php
小菜琳5 小时前
单例模式在 Android中的应用
android
へんしんへんしん10 小时前
MySQL主从复制与读写分离
android·github
mrathena13 小时前
Windows 11 安装 安卓子系统 (WSA)
android·windows
啊猪是的读来过倒15 小时前
Vue 全局状态管理新宠:Pinia实战指南
前端·vue.js·flutter·pinia·全局状态管理
DaSunWarman15 小时前
自动翻译 android/res/values/strings.xml
android·xml·机器翻译·strings.xml