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

news2024/11/20 9:42:19

目录

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

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

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

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

相关文章

深入解析HTTP方法与路由响应

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、HTTP方法概述 1. GET方法 2. POST方法 二、路由与响应处理 1. 路由的默认响应 2. 处…

若依分页问题排查

无限分页数据返回 一、问题排查1.1 代码排查1.2 sql排查1.3 原因分析 二、问题修复 项目使用了 若依的框架&#xff0c;前端反馈了一个问题&#xff0c;总记录条数只有 48条的情况下&#xff0c;传入的 页数时从6~~无穷大&#xff0c;每页大小为10, 此时还能返回数据&#xff0…

音视频直播(一)

协议基础篇 直播协议基础推流与拉流推流拉流 直播传输协议RTMP传输协议 && HTTP-FLV协议为什么RTMP做推流&#xff0c;反而很少做拉流&#xff1f;HTTP-FLV协议 RTSP协议HLS协议SRT协议 WebRTC协议应用于直播 直播协议基础 从网络上搜寻到的有关推流与拉流的示意图 从…

树莓派5烧系统和ssh远程实现

1、硬件说明 树莓派5 64G micro SD卡读卡器 2、烧录系统过程记录 之前写过一篇pi4B烧录Ubuntu22.04的博客&#xff0c;这篇就简单记录备份下 2.1 去ubuntu官网在树莓派上安装Ubuntu | Ubuntu下载Ubuntu 桌面 24.04 LTS 我之前已经下好了就有个(1) 2.2 用读卡器把SD卡插到…

【C++ ——— 哈希】位图 | 布隆过滤器

文章目录 1、位图1.1位图概念 2.位图实现位图的应用1.一百亿个整数&#xff0c;设计算法找到只出现一次的整数?2.给两个文件&#xff0c;分别有一百亿个整数&#xff0c;我们只有1G内存该如何找到两个文件的交集&#xff1f;3.位图应用变形&#xff1a;一个文件有100亿个int&a…

Java八股文:程序员的“面试经”还是技术壁垒?

Java八股文&#xff1a;程序员的“面试经”还是技术壁垒&#xff1f; “八股文”&#xff0c;在中国古代科举考试中&#xff0c;指的是一种程式化的文章写作格式&#xff0c;内容空洞&#xff0c;缺乏创新。而如今&#xff0c;这个词语被赋予了新的含义&#xff0c;用来形容技术…

systemctl 添加自定义系统服务

以 “启动、停止、重启” boa web server为例&#xff1a; 1. 编写系统服务脚本 编写一个符合系统服务规范的脚本。这个脚本通常描述了服务的启动、停止、重启等行为。你可以使用shell、C、C、Java等语言来编写这个脚本。 # boa_server_run.sh&#xff1a;#!/bin/bashset -e …

软考随记(二)

I/O系统的5种不同的工作方式&#xff1a; 程序控制方式&#xff1a; 无条件查询&#xff1a;I/O端口总是准备好接受主机的输出数据&#xff0c;或是总是准备好向主机输入数据&#xff0c;而CPU在需要时随时直接利用I/O指令访问相应的I/O端口&#xff0c;实现与外设的数据交换 …

解决uni-app progress控件不显示问题

官方代码&#xff1a; <view class"progress-box"><progress :percent"80" show-info activeColor"red" stroke-width"10" /> </view> 进度条并不在页面中显示&#xff0c;那么我们需要给进度条加上宽高style"…

Appium安装及配置(Windows环境)

在做app相关自动化测试&#xff0c;需要使用appium来做中转操作&#xff0c;下面来介绍一下appium的环境安装配置 appium官方文档&#xff1a;欢迎 - Appium Documentation 一、下载appium 下载地址&#xff1a;https://github.com/appium/appium-desktop/releases?page3 通…

对未知程序所创建的 PDF 文档的折叠书签层级全展开导致丢签的一种解决方法

对需要经常查阅、或连续长时间阅读的带有折叠书签的 PDF 文档展开书签层级&#xff0c;提高阅览导航快捷是非常有必要的。 下面是两种常用书签层级全展开的方法 1、 FreePic2Pdf 1 - 2 - 3 - 4 - 5 - 6&#xff0c;先提取后回挂 2、PdgCntEditor 载入后&#xff0c;直接保存…

如何选择国产数据库?

ORACLE的强大是全方位的,作为甲方DBA,喝喝咖啡,看看报纸,开开会,临听一下ORACLE ACE吹水! 作为国企的DBA, CTO.基本上国企都算是传统行业,都是跑ERP系统,进销存系统.客户关系系统.基本上都是B2B业务. 直接面对普通老百姓的互联网业务非常少. 核心业务都是使用ORACLE,少量互联网…

官网:管它日薄西山or蒸蒸日上,气质这块,必须拿捏死死的。

在日薄西山的时候&#xff0c;网站建设面临着许多困难和挑战。市场竞争激烈&#xff0c;用户需求多样化&#xff0c;技术更新迅速&#xff0c;这些都要求我们在网站建设中拥有高尚的气质。 而在蒸蒸日上的时刻&#xff0c;网站建设同样需要我们拿捏好气质。只有坚持下去&#…

VScode远程连接linux服务器开发,误删了文件怎么找回。

VScode远程连接linux服务器开发&#xff0c;误删了代码文件 因为远程服务器大家都在用&#xff0c;没有足够权限去折腾。找遍了没找到方法&#xff0c;就告诉我远程的文件本地没有缓存啊&#xff01;我就差点开始重写代码了。 后来被我发现了TIMELINE功能&#xff0c;这个功能…

瓦罗兰特国际服 马来西亚服低价区有哪些 瓦罗兰特低价区排行

瓦罗兰特国际服 马来西亚服低价区有哪些 瓦罗兰特低价区排行 瓦罗兰特作为当今游戏圈内热度最高的一款游戏&#xff0c;在全世界范围内都有着许多的游戏玩家。游戏基础玩法延续了FPS经典的5v5玩法&#xff0c;同时开发商在不同的游戏角色上添加了不同的技能&#xff0c;使得游…

Qt xml学习之calculator-qml

1.功能说明&#xff1a;制作简易计算器 2.使用技术&#xff1a;qml,scxml 3.项目效果&#xff1a; 4.qml部分&#xff1a; import Calculator 1.0 //需要引用对应类的队友版本 import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 1.4 import QtScxml…

Springboot JVM监控 通过Promethus

Springboot内置了对Prometheus得支持&#xff0c;可以监测得点有&#xff1a; JVM各指标参数&#xff08;GC&#xff0c;堆&#xff0c;非堆等&#xff09;接口调用次数&#xff0c;延时系统内存&#xff0c;IO&#xff0c;CPU使用率 部署Prometheus和Grafana 准备一台2核4G…

HackTheBox-Machines--Sense

Popcorn 测试过程 1 信息收集 服务器开启80、443端口 80端口 访问 80 跳转到 443 – https://10.129.196.51/ &#xff0c;该页面是 pfSense 登录界面&#xff0c;默认密码是&#xff1a; admin/pfSense&#xff0c;使用默认账号密码登录失败 目录扫描 ./gobuster dir -u htt…

JavaWeb笔记整理+图解——Filter过滤器

欢迎大家来到这一篇章——Filter过滤器 监听器和过滤器都是JavaWeb服务器三大组件(Servlet、监听器、过滤器)之一,他们对于Web开发起到了不可缺少的作用。 ps:想要补充Java知识的同学们可以移步我已经完结的JavaSE笔记,里面整理了大量详细的知识点和图解,可以帮你快速掌…

期权高频交易能做吗?期权可以频繁交易吗?

今天带你了解期权高频交易能做吗&#xff1f;期权可以频繁交易吗&#xff1f;在期权交易市场&#xff0c;大部分人都知道不能频繁交易&#xff0c;就连不少投资新手都知道频繁交易是大忌&#xff0c;是错误的&#xff0c;是应该避免的。所以是不行的。 期权高频交易能做吗&…