1.windows上环境搭建

(1)  在dart官网上下载对应的sdk安装即可。归档 | Dart

(2)  使用vscode开发,安装dart插件和Code Runner插件即可。

 2.Dart的入口方法、打印、注释、常量、及变量

//1. 在dart中所用被执行的代码都得放在main方法中

// main() {
// print("你好dart");
// }
void main() {
//表示main方法没有返回值
print("你好dart");
}
//2.常量及变量的定义

void main() {
//变量命名和js基本一致
//(1)可以通过var定义变量,自动进行类型推断
var str = "sdfsdf";
str = "nvsdfdf";
print(str);
var num = 1233;
print(num); //(2)定义常量 //const 定义常量必须赋初始值,不能修改
const PI = 3.1416926; // final不仅有const在编译时常量的特性,最重要的时它是运行时的常量,并且final时惰性初始化
// 即运行时第一次使用才初始化
final time = new DateTime.now();
// ignore: unused_local_variable
final h;
h = 3;
// h = 4;//报错,不能再次复制 print(time);
}

3.dart中的常用的数据类型

1.Numbers(数值)
 int
double
2.String(字符串)
 String
3.Booleans(布尔)
bool
4.(数组)
在dart中,数组时列表对象,所以大多数的人称其未列表
5. Maps(字典)
 Map是一个键值对相关的对象,键和值可以时任意类型的对象
//1.字符串类型
void main() {
//(1)var定义
var str = "sdfsdf";
print(str);
//(2)通过String定义字符串
String str1 = "2dsfdsf";
print(str1);
// (3) 多行字符串通过三引号
String str2 = """this is xiaoming
this is xiaohong
""";
print(str2);
//(4)字符串拼接
String str3 = "你好";
String str4 = "dart";
print('$str3 $str4');
print(str3 + str4);
}
//2.数值类型
void main() {
// (1)int必须是整型
int num = 1233;
print(num);
//(2)double可以是整型和浮点型
double num1 = 12.3;
double num2 = 12;
print(num1);
print(num2);
//(3)运算符和js一样+-*?%
}
//3.Boolean类型
void main() {
//1.bool类型
bool flag = false;
flag = true;
print(flag);
}
//4.数组
void main() {
//(1)定义数组,
var list = ["张三", 20, true];
print(list);
//(2)定义数组,指定类型
var arr = <String>["asdad", "fdggdfg"];
print(arr);
//(3)定义数组,添加或移除数据
var arr1 = [];
arr1.add("dsff");
arr1.add(23); print(arr1); print(arr1.length);
//(4)移除
list.remove(20);
print(list);
//(5)创建固定长度的集合,不能修改长度 var arr2 = List<String>.filled(2, "");
arr2[0] = "张三";
arr2[1] = "李四";
// arr2.add("wanger");运行时会报错
print(arr2);
}
//6.Map字典(对象)
void main() {
//1.定义Maps
var person = {
"name": "张三",
"age": 20,
123: ["打篮球", "玩游戏"]
};
print(person);
//不能像JS用person.name
print(person['name']); var p = new Map();
p["name"] = "李四";
p["age"] = 20;
print(p);
}

4.判断数据类型的方法

void main() {
var str = "123";
if (str is String) {
print("str是字符串类型");
} else {
print("str是数字类型");
}
}

5.算术运算符

void main() {
int a = 26;
int b = 13;
print(a + b); //加
print(a - b); //减
print(a * b); //乘
print(a / b); //除
print(a % b); //取余
print(a ~/ b); //取整
}

6.关系运算符

void main() {
int a = 5;
int b = 3;
print(a == b); //判断是否相等 false
print(a != b); //判断是否不等 true
print(a > b); //判断是否大于
print(a < b); //判断是否小于
print(a >= b); //判断是否大于等于
print(a <= b); //判断是否小于等于
}

7.逻辑运算符

void main() {
bool flag = true;
print(!flag); //取反
// && 并且:全为true为true否则为false //|| 或者:全为false值为false,否则为true
}

8.赋值运算符

void main() {
//1.赋值运算符
int a = 10;
print(a);
//b??=23 表示b为空的话把23赋值给b
int b = 10;
// b??23;
print(b);
// 2.复合赋值运算符
var c = 12;
// c += 10; //表示c=c+10
// print(c);//22
c *= 3; //表示c=c*3
print(c); //36
}

9.条件运算符

// ignore_for_file: dead_code

void main() {
//1. if else switch case 和js一样用法
bool flag = true;
if (flag) {
print(true);
} else {
print(false);
}
//2.三目运算符
bool isShow = false;
String c = isShow ? "2324" : "qweqe";
print(c); //3. ??运算符
var a;
var b = a ?? 10;
print(b);
}

10.类型转换

void main() {
//1.Number和Stirng类型之间的转换
//Number转换为String 用toString()
//String转换为Number 用int.parse()或double.parse()
String str = "123.2";
var num = double.parse(str);
print(num is double); var myNum = 13;
var str1 = myNum.toString();
print(str1 is String); //2.其他类型转换为bool类型
// isEmpty:判断字符串是否为空
var str2 = "";
if (str2.isEmpty) {
print("str2为空");
} else {
print("str2不为空");
}
var count;
if (count == null) {
print("count为空");
} else {
print("count非空");
}
}

 11.循环语句

void main() {
//1.for循环和js一样
for (var i = 1; i <= 100; i++) {
if (i % 2 == 0) {
print(i);
}
} List arr = ["张三", "李四", "王五"];
for (var i = 0; i <= arr.length; i++) {
print(arr[i]);
}
} //2.while
void main() {
//while先判断条件成立再执行
var i = 1;
while (i <= 10) {
print(i);
i++;
}
//do while先执行一次再判断条件是否成立
do {
print(i);
i++;
} while (i <= 10);
}

12.数组的常用方法

void main() {
//1.判断数组是否为空isEmpty、isNotEmpty
List arr = ["苹果", "香蕉"];
print(arr.isEmpty); //false
print(arr.isNotEmpty); //true
//2.翻转数组reversed
print(arr.reversed);
//toList将其他类型转换为数组
print(arr.reversed.toList()); //List中的常用方法
List arr1 = ["苹果", "香蕉"];
//3.add增加一个
arr1.add("桃子"); //增加一个
print(arr1);
//4.addAll增加多个
arr1.addAll(["芒果", "西瓜"]); //
print(arr1);
//5.indexOf和js一样 查找数据,没有返回-1
print(arr1.indexOf("sdf"));
//6.remove删除数据
arr1.remove("西瓜");
arr1.removeAt(1); //根据索引删除
print(arr1);
//7.修改数据fillRange
List myList = ["苹果", "香蕉", "西瓜"];
myList.fillRange(1, 3, "qww");
print(myList);
//8.插入一个数据insert
myList.insert(1, "ddd");
print(myList);
//9.插入多个insertAll
myList.insertAll(1, ["芒果", "橘子"]);
print(myList);
//10.join和split和js一样 }

13.遍历数组的方法

// ignore_for_file: unused_local_variable

void main() {
List arr = ["苹果", "香蕉", "西瓜"];
//1.for in
for (var item in arr) {
print(item);
}
Map obj = {"name": "ewrwr", "age": 18}; //2.forEach
arr.forEach((item) {
print(item);
});
List myList = [1, 2, 4];
//3.map
var newList = myList.map((e) {
return e * 2;
});
print(newList.toList()); //4.where 返回满足条件的数据
List list = [1, 2, 4, 6, 7, 9, 13];
var newData = list.where((item) {
return item > 4;
});
print(newData);
//6.any只要有一个满足条件返回true,类似js中some
var f = list.any((value) {
return value > 9;
});
print(f);
  //7.every所有的满足条件返回true,否则返回false,类似js中every
  List arr1 = [3, 5, 7, 9, 12];
  var res = arr1.every((item) => item > 4);
  print(res);
}

14.操作Map的方法

void main() {
Map person = {"name": "张三", "age": 18};
//1.获取key 用keys
print(person.keys.toList());
//2.获取value用values
print(person.values.toList());
//3.判断是否为空isEmpty
print(person.isEmpty);
//4.添加属性addAll
person.addAll({
"work": ["敲代码", "送外卖"],
"height": 180
});
print(person);
//5.删除remove
person.remove("age");
print(person);
//6.查看映射中存在的某个值containsValue
print(person.containsValue("张三"));
}

15.自定义方法

//1.命名方法
//返回值类型+方法名,不知道返回值类型可以不指定返回值类型
//全局方法
String getStr() {
return "this is str";
} void main() {
var str = getStr();
print(str);
//局部方法
int getSum(int n) {
var sum = 0;
for (var i = 1; i <= n; i++) {
sum += i;
}
return sum;
} var data = getSum(100);
print(data);
//传入可选参数 String printUserInfo(String name, [age]) {
if (age != null) {
return "姓名:$name---年龄:$age";
}
return "姓名:$name---年龄保密";
} print(printUserInfo("张三")); //默认参数
String printUserInfo1(String name, [String sex = "男"]) {
return "姓名:$name--性别:$sex";
} print(printUserInfo1("张三", "女")); //2.匿名方法
var fn = () {
print(122);
}; fn();
//3.方法递归 var sum = 1;
fn1(int n) {
sum *= n;
if (n == 1) {
return;
}
fn1(n - 1);
} fn1(5);
print(sum);
}

16.dart中定义类

//1.定义类,与js类似

class Person {
String name = "张三";
int age = 18;
void getInfo() {
print("${this.name}---${this.age}");
} //修改类中shuxing
void setInfo(int age) {
this.age = age;
}
}
void main() {
// 实例化类
var p = new Person();
p.getInfo();
p.setInfo(28);
p.getInfo();
}

 17.dart中构造函数

//类中构造函数
//late 延迟初始化值
class Person1 {
late String name;
late int age;
//(1)默认构造函数与类名相同
Person1(String name, int age) {
this.name = name;
this.age = age;
}
//(2)默认构造函数的简写
// Person1(this.name, this.age); //(3)命名构造函数,可以写多个
Person1.now() {
print("我是命名构造函数");
} void getInfo() {
print("${this.name}---${this.age}");
}
} void main() {
//默认构造函数的实例化
var p1 = new Person1("王二", 25);
p1.getInfo();
var p2 = new Person1("李四", 15);
p2.getInfo();
//命名构造函数的调用
var p3 = new Person1.now();
}

 18.类中的模块化和私有属性

//类的模块化
import "lib/Animal.dart"; void main() {
//模块化实例化
var a = new Animal("小狗", 3);
// print(a._name);// 不能访问私有属性
print(a.age);
print(a.getName());
}

19.类中的getter和setter

class Rect {
late num height;
late num width;
Rect(this.height, this.width);
// area() {
// return this.height * this.width;
// }
//使用get定义方法,类似计算属性
get area {
return this.height * this.width;
} set areaHeight(value) {
this.height = value;
}
} void main() {
var r = new Rect(10, 2);
// print(r.area());
print(r.area); //调用时直接通过访问属性的方式来访问
r.areaHeight = 6;
print(r.area); //调用时直接通过访问属性的方式来访问
}

20.类中的静态方法和静态属性

//在前面加上static来声明静态属性和方法
class Person {
static String name = "张三";
static int age = 15;
String work = "码农";
static void show() {
//静态属性直接访问,不需要加this
print(name);
} void printInfo() {
//非静态方法可以访问静态成员
print(age);
show();
} static void getUserInfo() {
// print(this.work);//静态方法没法访问非静态属性
// this.printInfo(); //静态方法没法访问非静态方法
}
} void main() {
//静态方法和属性直接通过类来访问
// print(Person.name);
// Person.show();
var p = new Person();
p.printInfo();
}

21.对象操作符

class Person {
String name;
int age;
Person(this.name, this.age);
void getInfo() {
print("${this.name}---${this.age}");
}
} void main() {
//1.条件运算符 ?
var p;
p?.getInfo();
// var p = new Person("张三",18);
// p.getInfo(); //2.类型判断 is
var p1 = new Person("张三", 18);
if (p1 is Person) {
p1.name = "李四";
}
p1.getInfo(); //3.类型转换 as
var p2 = "";
p2 = new Person("张三", 18) as String; //级联符 ..
var p3 = new Person("李四", 23);
// p3.name = "王二";
// p3.age = 40;
// p3.getInfo();
//可以简化为
p3
..name = "李四"
..age = 30
..getInfo();
}

22.类的继承

class Person {
String name;
int age;
Person(this.name, this.age);
void getInfo() {
print("${this.name}---${this.age}");
} void work() {
print("work");
}
} // 通过extends关键字来继承
class Son extends Person {
late String sex;
//通过super传父类中的参数
Son(super.name, super.age, sex) {
this.sex = sex;
}
//覆写赋值中的方法
@override
getInfo() {
print("${this.name}---${this.age}--${this.sex}");
} run() {
// super.work();
this.work();
}
} void main() {
Son s = new Son("张三", 30, "男");
s.getInfo();
s.run();
}

23.抽象类和接口

//1.抽象类的定义

abstract class Animal {
eat(); //抽象方法:定义方法没有方法体,而是在子类中实现
} class Dog extends Animal {
@override
eat() {
//必须要实现抽象类中的方法
print("小狗爱吃骨头");
}
} //2.dart中没有interface,而是通过抽象类来实现接口的
abstract class Db {
late String url;
add(String data);
} abstract class Methods {
late String methods;
} //通过implements来实现接口,可以实现多个接口
class Mysql implements Db, Methods {
String url;
String methods;
Mysql(this.url, this.methods);
@override
add(String data) {
print("add方法$data---${this.methods}");
}
} void main() {
var d = new Dog();
d.eat(); // var a = new Animal();抽象类不能实例化 var mysql = new Mysql("127.1.0.1", "POST");
mysql.add("dsfsdf");
}

dart的基本使用的更多相关文章

  1. Angular JS | Closure | Google Web Toolkit | Dart | Polymer 概要汇集

    AngularJS | Closure | Google Web Toolkit | Dart | Polymer GWT https://code.google.com/p/google-web-t ...

  2. 用Dart写的黑白棋游戏

    2013年11月,Dart语言1.0稳定版SDK发布,普天同庆.从此,网页编程不再纠结了. 在我看来,Dart语法简直就是C#的升级版,太像了.之所以喜欢Ruby的一个重要理由是支持mixin功能,而 ...

  3. 用Dart&Henson玩转Activity跳转

    用Dart&Henson玩转Activity跳转 Extra是Android标准的组件之间(Activity/Fragment/Service等)传递数据的方式.本文介绍了开源项目Dart的使 ...

  4. 在InteliJ IDEA中写Dart及配置IDEA - Dart Plugin

    此文运用的是优雅的Markdown而书 Dart官方建议使用的编译器是DartEditor,我下载下来看下,和Eclipse的界面很相像.对于Eclipse,我是既爱又恨,爱它的稳定,恨它的功能没有I ...

  5. 用Dart开发Android应用(sky应用)

    此文运用的是优雅的Markdown而书 流弊的Google公司,为了解决Android的卡顿问题,为此下了是不少的决心,这不最新研发的Sky移动应用UI框架,在用户界面和高质量的UI交互设计,很是让人 ...

  6. [翻译]用Dart塑造Android未来

    明天回家,今天下午瞅时间翻译了Cyril Mottier的另外一篇有关Android前景的文章. 原谅地址是:http://cyrilmottier.com/2014/06/12/shaping-th ...

  7. Sky(dart)语言介绍-android学习之旅(十)

    认识dart语言 google于2011年10月10日发布了"dart"语言的"早起预览版",google希望利用这款语言,帮助开发者克服javaScript的 ...

  8. dart 如何优雅的避空

    前言 对于每一个程序员来说,空指针异常应该是基本都会遇到过的异常,而且这个异常出现的概率还比较大. 但是,空指针异常又是最容易解决的异常,因为只要加个非空判断就可以避免了. 本篇通过对比一般非空判断和 ...

  9. Dart语言入门(一)

    Dart 语言介绍 Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言,允许用户通过 Chromium 中所整合的虚拟机(Dart VM)直接运行 Dart 语言编写的程序 ...

  10. 从零学习Flutter(一):初识Dart

    Fluter是Google推出的跨平台开发App的一套框架,很多人都说,Google出品比属于金品,故,我也来凑凑热闹,Fluter是用Dart写的,所以在用Fluter之前,我们还是有必要简单了解一 ...

随机推荐

  1. Element ui&图标、按钮、超链接、单选框

    ElementUI&Vant ui 基于Vue的一套桌面端的组件库,提前封装好的UI模版,方便开发者快速搭建一个网站前端界面. 官网:https://element.eleme.cn/#/zh ...

  2. ACR20新闻_RA指南更新_最大化应用MTX

    美国风湿病学院(ACR)学术年会2020新闻 译自Medscape官网 https://www.medscape.com/viewarticle/940636#vp_1 (注: 译文借助谷歌翻译助手, ...

  3. CSS 页面整体变灰色

    body {-webkit-filter: grayscale(100%) !important;-moz-filter: grayscale(100%) !important;-ms-filter: ...

  4. inspeckage

    c:\ChangZhi\dnplayer2   d:\ChangZhi\dnplayer2然后在电脑的 terminal 中执行 " 端口转发 " 命令:adb forward t ...

  5. 野火STM32 ADC独立模式单通道采集实验意外

    1 //about calibration 2 //ADC_ResetCalibration(ADC1); 3 //while(ADC_GetResetCalibrationStatus(ADC1) ...

  6. 一些常用计算机快捷键和dos命令

    1.window常用快捷键 ctrl V 粘贴 ctrl C 复制 ctrl A 全选 ctrl X 剪切 ctrl Z 撤销 ctrl S 保存 ALT F4 关闭窗口 shirt delete 永 ...

  7. 在orangepi 3 lts使用high speed timer

    概述 在allwin H6的用户手册上可以发现全志H6芯片支持普通计时器和高速计时器. 普通计时器可以处理低频定时任务,其时钟源包括LOSC和OSC,前者频率为32768Hz,后者为24MHz. 高数 ...

  8. antdVue 重置select和input的样式 去掉蓝色换成灰色

    代码实现: <template> <div> <a-select mode="tags" style="width: 200px" ...

  9. FMC子卡设计资料原理图:FMC177-基于AD9361的双收双发射频FMC子卡

    FMC177-基于AD9361的双收双发射频FMC子卡 一.板卡介绍 FMC177射频模块分别包含两个接收通道与发射通道,其频率可覆盖达到70MHz~6GHz,AD9361芯片提供具有成本效益的实验平 ...

  10. k8s ingress 报错整理

    问题: Error from server (InternalError): error when creating "ingress-rules-demo1.yaml": Int ...