Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flutter —— 解密dart语法

Flutter —— 解密dart语法

作者头像
CC老师
发布于 2022-01-14 06:59:42
发布于 2022-01-14 06:59:42
83900
代码可运行
举报
运行总次数:0
代码可运行

1. Flutter 项目创建

Flutter配置完之后,就可以在Android studio 创建 Flutter项目啦

点击Create New Flutter Project之后,这里就会有四个选项:

  • Flutter Application: 创建一个 Flutter 应用工程
  • Flutter plugin : 这是为了给 Android 和 iOS 提供插件应用(暴露的借口)的时候使用
  • Flutter Package : 创建一个 Dart组件 发布到 pub 来提供便捷开发 类似一些三方库
  • Flutter Module: 一般用来做混合开发,嵌入到 Android 和 iOS 工程当中!

之后输入工程名字,工程地址,然后选择next。工程名字不能用驼峰命名。

这里就Finish啦。

到这里,工程就创建好了,并且可以跑起来了。

2. Dart 语法

2.1 var、final和const

  • var: 声明变量,可以赋值不同的类型。声明到变量如果没有初始化,那么值为null,并且之后可以赋值为不同的类型。如果初始化赋值了那么变量的类型就确定了。
  • final:声明一个只能赋值一次的变量。

可以先声明,之后赋值。但是声明之后没有赋值,就不能被使用。

  • const:声明常量,声明的时候就需要赋值,声明之后不能被改变。

2.2 num

num:声明之后需要赋值才能够被使用的变量。可以赋值Int或者Double的值。

Flutter 里面多了一个运算符~/,用来取整,并且通过toDouble(),toInt()进行数据类型转换。

2.3 string

Flutter 中的字符串可以使用单引号或者双引号创建,并且可以使用+进行字符串的拼接,使用 *进行字符串的复制。使用a[x]来获取相对应位置的character,

字符串还可以使用三个引号或者双引号来创建多行字符串,并且可以看到双引号创建的多行字符串是拼接在一起的,而三个引号创建的字符串则是保留换行的。

Flutter 里面取外面的值只需要在字符串里面添加${}即可。

如果在字符串中需要/n而不是换行,那么直接在字符串前面添加r就可以了。

2.4 list 和 map

list,Dart中的列表:

  • var list1 = [1,2,3];创建可变列表。
  • var list1 = const [1,2,3]; 创建不可变列表。
  • 可以存放不同的类型

指定位置添加元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list1.insert(0, "asd");

删除指定元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list1.remove("asd");

清除所有元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list1.clear();

数组排序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list1.sort();

取sublist(这里取到的范围是1-2,也就是包含前面不包含后面)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list1.sublist(1,3);

list 转为map

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
list1.asMap()

如果是不可变数组进行数组的操作就会报错。

map,dart中的键值对。

  • var dic1 = {'one':'xiaolu','two':'xiaoshun'};创建可变列表。
  • var dic1 = const {'one':'xiaolu','two':'xiaoshun'};创建不可变列表。

字典取值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dic1["one"]

获取字典长度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dic1.length;

获取字典所有的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 dic1.values;

获取字典所有的键

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 dic1.keys;

2.5 ??= 和 ??

??= : 如果这个变量的值为空的时候则进行赋值,否则就不进行赋值。

?? : 如果左边有值返回左边,否则就返回右边。

2.6 方法 和 箭头函数

Dart 中的方法也是一个对象,返回值和参数类型可以省略。当方法的执行语句只有一句的时候,可以使用箭头函数 => 表达式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void main() => functionDemo();

正常的函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int sum(int a, int b) {
  return a + b;
  }

忽略返回值和参数类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum( a,  b) {
  return a + b;
  }

2.7 方法的可选参数

传递可选参数必须带上形参的名字。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum(int a,{ b,  c}){
  b ??= 0;
  c ??= 0;
  return a + b + c;
}

这样调用的时候,就要带上形参的名字。这里的顺序可以颠倒。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum(1,c:2,b:3);

这里也可以只传一个可选参数,当然也可以都不传。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum(1,b:3);
sum(1);

函数如果将可选参数的类型定义为 Int,String等类型,需要在Int,String后面添加一个?,这样就会有null ability,参数就可以为空了。但是这里要记得处理参数为空的情况。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum(int a,{int? b,int?  c}){
  b ??= 0;
  c ??= 0;
  return a + b + c;
}

或者可以给参数一个默认值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum(int a,{int b = 0,int c = 0}){
  return a + b + c;
}

还有一种方法不需要传递参数的名字,只需要按顺序输入值就可以了。这里不能跳过b给c赋值,如果只输入两个参数,那么就会赋值a和b。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum(int a,[int b = 0, int c = 0]){
  return a + b + c;
}

调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum(1,2,3);
sum(1,2);

2.8 方法作为参数传递

方法在dart中也是一个对象,在dart中,万物皆对象,所以可以赋值给一个变量,并且变量可以执行函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var sum = sum1(1,2,3);
//执行函数
sum();

方法也可以作为参数传递。这里就会分别打印1,2,3,4。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var list = [1,2,3,4];
list.forEach(print);

forEach源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 void forEach(void action(E element)) {
    for (E element in this) action(element);
  }

方法作为参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void functionDemo() {
sum2(sum1);
}

void sum2( func(int a,[int b , int c ])){
print(func(1,2,3));
}


sum1(int a,[int b = 0, int c = 0]){
  return a + b + c;
}

2.9 匿名函数

匿名函数就是没有方法名称的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var func =  () {
  print('匿名方法');
};
// 调用
func();

还有一种匿名方法是立即执行函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(() {
  print('立即执行函数');
})();

匿名方法也可以作为参数传递

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum2((int a,[int b = 0, int c = 0]){
  return a + b + c;
});

2.10 闭包

闭包(closure),定义在函数里面的函数就是闭包,闭包也是一个对象。闭包可以访问外部函数的局部变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
funcA() {
  int count = 0;
  return ()=>print(count++);//这个匿名函数就是一个闭包。
}

这里闭包会一直持有count,count会一直存在不会被释放。这里func2是返回的一个新的对象,所以会重新开始。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void closureDemo(){
  var func = funcA();
  func();
  func();
  func();
  func();
  var func2 = funcA();
  func2();
  func2();
}

funcA() {
  int count = 0;
  return ()=>print(count++);//这个匿名函数就是一个闭包。
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HelloCoder全栈小集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Dart语言详解(二)——基本语法
文档归档: https://github.com/yang0range/flutterfile
Demo_Yang
2020/03/11
1.3K0
Flutter 基础知识点总结
随着前不久Flutter 1.7正式版发布,Flutter今年迎来了迭代的小高潮,很多的公司也纷纷布局Flutter技术栈,并且很多大公司招聘的时候也明着写明对于Flutter的技术要求。正好最近刚入门了Flutter,并在项目中进行了一些应用,于是将应用的一些心得进行整理,希望帮助更多的初学者。
xiangzhihong
2020/01/14
5.4K0
Flutter 基础知识点总结
Dart语言基础语法(一)
前言 环境准备 安装Dart SDK 配置环境变量 配置 VSCode 编辑器 测试环境 基础语法 代码注释 内置数据类型 变量与常量 定义变量 定义常量 内置类型的常用操作 数值类型 字符串 布尔类型 列表 映射 函数 定义函数 函数的参数 命名可选参数 位置可选参数 匿名函数 箭头函数 运算符 算术运算符 类型判定运算符 条件表达式 级联运算符 条件成员访问符 分支与循环 条件分支 循环语句 基本循环 特有循环 Flutter课程已上线 Flutter 全栈开发之Dart编程指南 https://
arcticfox
2019/09/17
2.7K0
Dart语言基础语法(一)
Flutter-从入门到项目 05:Dart语法快速掌握(下)
这一篇继续接 Flutter-从入门到项目 04:Dart语法快速掌握(上) 分析 , 从上一篇文章可以得出大家不太喜欢看语法相关类的文章. 但是没有关系 我还是继续写: 毕竟工欲善其事必先利其器 大家可以先收藏备用
CC老师
2021/02/05
1.5K0
Flutter-从入门到项目 05:Dart语法快速掌握(下)
前端转Flutter - 对照Javascript学Dart
最近在学flutter,发现flutter的编程语言Dart和Javascript有诸多相似,对于前端开发者而已好处在于有JavaScript经验学习Dart会快一些,缺点在于容易搞混这两种语言。因此在学习的过程中记录了一下Javascript和Dart的对比,方便记忆。
MudOnTire
2019/10/15
3.1K0
【Flutter】Dart 函数 ( 函数构成 | 私有函数 | 匿名函数 | 函数总结 )
匿名方法 : 只有参数列表和方法体 , 没有方法名称 , 匿名方法可以赋值给一个变量 ,
韩曙亮
2023/03/28
2.2K0
Dart语言简介
在跨平台开领域被 JS 一统天下的今天,Dart 语言的出现无疑是一股清流。作为后来者,Dart语言有着不少 Java、Kotlin 和 JS 的影子,所以对于 Android 原生开发者、前端开发者而言无疑是非常友好。
用户1974410
2022/08/07
1.9K0
flutter--Dart基础语法(二)流程控制、函数、异常
Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,Flutter 开源、免费,拥有宽松的开源协议,支持移动、Web、桌面和嵌入式平台。
mukekeheart
2021/02/04
1.5K0
Flutter基础之Dart语言入门
编程语言并不是孤立存在的,Dart也是这样,他由语言规范、虚拟机、类库和工具等组成:
Qson
2022/04/11
8240
Flutter基础之Dart语言入门
Flutter Lesson 2: Dart 语法简单介绍
Dart语法【Dart中文】可以说是Google因为为Flutter量身定做的一门语言,所以,我们之前基本上都没有接触过这门语言,在入手Flutter坑的时候,还必须了解一下Dart的语言特性。
踏浪
2019/07/31
1.9K0
Flutter Lesson 2: Dart 语法简单介绍
老司机用一篇博客带你快速熟悉Dart语法
版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/3d927a7bf020
AWeiLoveAndroid
2018/09/03
3.4K0
《Flutter》-- 3.Dart语言
https://www.dartcn.com/guides/language/language-tour
爱学习的程序媛
2022/04/07
3.1K0
《Flutter》-- 3.Dart语言
Flutter基础之Dart语言入门:函数
Dart是一种真正的面相对象的语言,函数即是对象,类型是Function,即可赋值给变量或作为参数传递给其他函数
Qson
2022/04/11
4050
上手指南 | Dart,随用随查
dynamic:该类型具有所有可能的属性和方法,一个变量被 dynamic 修饰,相当于告诉系统,我知道这个类型到底是什么。使用后再编译时不会推断数据的类型,但是运行时会推断。
345
2022/02/11
1.9K0
上手指南 | Dart,随用随查
dart系列之:dart语言中的函数
函数是所有编程语言都有的内容,不管是面向对象还是面向过程,函数都是非常重要的一部分。dart中的函数和java中的函数有什么区别呢?
程序那些事
2021/11/10
9010
dart系列之:dart语言中的函数
『Flutter开发实战』一小时掌握Dart语言
本文将从变量和运算符开始到类和库的使用来向你介绍 Dart 编程语言的主要功能,这里假设你已经有使用其它语言进行编程的经验。
小宋是呢
2022/01/05
5.3K0
Flutter 入门指北之 Dart
原文:https://www.jianshu.com/p/8ddb16902ce6
陈宇明
2020/12/16
9220
Dart 学习之开发语言概览,带思维导图(一)
之前在学习flutter,本以为自己可以轻松上手掌握dart,结果发现经常有不懂的语法。所以决定踏踏实实的学习一遍dart。网上有很多相关学习资料.我主要从官网来学习,然后又找了一个视频来补充学习。
siberiawolf
2020/03/24
1.9K0
Dart 学习之开发语言概览,带思维导图(一)
35分钟教你学dart(第二节)
其实说35分钟教你学会dart,有点言过其实了,不过你依旧可以在这篇文章中学到了解 Dart 基础知识
徐建国
2021/12/01
13.4K0
35分钟教你学dart(第二节)
匿名函数,内置函数,闭包
练习: def func(a,b): return a + b print(func(4,5)) # 构建匿名函数 func1 = lambda a,b: a + b print(func1(1,2))
py3study
2020/01/16
6190
相关推荐
Dart语言详解(二)——基本语法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验