dart的基本使用
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.字符串类型
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);
}
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的基本使用的更多相关文章
- Angular JS | Closure | Google Web Toolkit | Dart | Polymer 概要汇集
AngularJS | Closure | Google Web Toolkit | Dart | Polymer GWT https://code.google.com/p/google-web-t ...
- 用Dart写的黑白棋游戏
2013年11月,Dart语言1.0稳定版SDK发布,普天同庆.从此,网页编程不再纠结了. 在我看来,Dart语法简直就是C#的升级版,太像了.之所以喜欢Ruby的一个重要理由是支持mixin功能,而 ...
- 用Dart&Henson玩转Activity跳转
用Dart&Henson玩转Activity跳转 Extra是Android标准的组件之间(Activity/Fragment/Service等)传递数据的方式.本文介绍了开源项目Dart的使 ...
- 在InteliJ IDEA中写Dart及配置IDEA - Dart Plugin
此文运用的是优雅的Markdown而书 Dart官方建议使用的编译器是DartEditor,我下载下来看下,和Eclipse的界面很相像.对于Eclipse,我是既爱又恨,爱它的稳定,恨它的功能没有I ...
- 用Dart开发Android应用(sky应用)
此文运用的是优雅的Markdown而书 流弊的Google公司,为了解决Android的卡顿问题,为此下了是不少的决心,这不最新研发的Sky移动应用UI框架,在用户界面和高质量的UI交互设计,很是让人 ...
- [翻译]用Dart塑造Android未来
明天回家,今天下午瞅时间翻译了Cyril Mottier的另外一篇有关Android前景的文章. 原谅地址是:http://cyrilmottier.com/2014/06/12/shaping-th ...
- Sky(dart)语言介绍-android学习之旅(十)
认识dart语言 google于2011年10月10日发布了"dart"语言的"早起预览版",google希望利用这款语言,帮助开发者克服javaScript的 ...
- dart 如何优雅的避空
前言 对于每一个程序员来说,空指针异常应该是基本都会遇到过的异常,而且这个异常出现的概率还比较大. 但是,空指针异常又是最容易解决的异常,因为只要加个非空判断就可以避免了. 本篇通过对比一般非空判断和 ...
- Dart语言入门(一)
Dart 语言介绍 Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言,允许用户通过 Chromium 中所整合的虚拟机(Dart VM)直接运行 Dart 语言编写的程序 ...
- 从零学习Flutter(一):初识Dart
Fluter是Google推出的跨平台开发App的一套框架,很多人都说,Google出品比属于金品,故,我也来凑凑热闹,Fluter是用Dart写的,所以在用Fluter之前,我们还是有必要简单了解一 ...
随机推荐
- js实现一二级域名共享cookie
前言 最近接手的项目中 ,有人反馈了一个问题,说是在访问网站并登录后,登录成功有登录信息,但是刷新页面后重定向到了登录页面,让从新登录. 打开 goole 调试页面,查看 cookie 时发现存储的相 ...
- js中的Object.keys、array.map、groupBy、call、apply总结分享
分享几个js中的函数 Object.keys() 首先这个函数是用来干嘛的呢?是用来把一个json字符串里的key全都取出来重新整成一个数组的方法,那么这个函数怎么用呢,接下来贴出我最近碰见的用法: ...
- Python:Excel自动化实践入门篇 甲【留言点赞领图书门票】
*以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=22 ...
- Java面向对象进阶第一天
面向对象高级第一天 static关键字 是静态的意思,可以修饰成员变量,也可以修饰成员方法 成员变量的分类 静态成员变量 有static修饰,属于类,与类一起加载,内存中只有一份,可以被共享访问. 什 ...
- 代码随想录算法训练营day08 | leetcode 344.反转字符串/541. 反转字符串II / 剑指Offer05.替换空格/151.翻转字符串里的单词/剑指Offer58-II.左旋转字符串
基础知识 // String -> char[] char[] string=s.toCharArray(); // char[] -> String String.valueOf(str ...
- 置顶TOP
HTML <a href="javascript:void(0)" class="go-top" @click="goTop"> ...
- 《HelloTester》第2期
1.前言 饭前喝汤:如果你的月薪低于1万,不要总想着"新机会",而更加重要的是"练手艺".当你有了一定的手艺可以施展,机会自然存在! 读了之前的简历篇,我想你对 ...
- linux kali 换源细节
1.打开命令行输入sudo vim /etc/apt/sources.list,并输入密码(也许你进入终端是空白的,也是没有问题的.).这里我们用root身份进去.不然后期会报错. (E45: 're ...
- 08. AssetBundle.LoadFromFile
参数 path 文件在磁盘上的路径. crc 未压缩内容的 CRC-32 校验和(可选).如果该参数不为零,则加载前将内容与校验和进行比较,如果不匹配则给出错误. offset 字节偏移(可选).该值 ...
- Appium常见属性和命令
from appium import webdriverimport time, tracebackdesired_caps = {}desired_caps['platformName'] = 'A ...