一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。
Dart的基础法语来自下面的网站学习。
学习网站地址
也可以下载 (flutter示例+) app学习
本人使用VSCode软件开发。安装VSCode之后,需要安装Dart的语法: $ brew tap dart-lang/dart $ brew install dart
在VSCode安装两个插件: dart dart第三方用于语法提示的,我觉得使用起来一般般,语法没什么提示效果 
code runner 用于右键运行代码   如果关机之后,重新打开软件,发现右键没有run code运行代码的话。可以把code runner第三方删除它后重新安装。 
搭建完之后写一个 hello 代码试试
main() {
print('你好 dart');
int age = 20;
String sex = '女';
print('age:$age --- sex:$sex');
}
 
变量规则
var str_0 = 'this is var';
print(str_0);
String str_1 = 'this is string';
print(str_1);
int str_2 = 123;
print(str_2);
final name = 'bob';
print(name);
final String nickName = 'boby';
print(nickName);
const bar = 1000;
print(bar);
const double atm = 1.01 * bar;
print(atm);
var stringValue = '';
strngValue = 456;
print(strngValue);
类型数据
var clapping = '\u{1f44f}';
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList());
String str1 = '你好';
String str2 = 'dart';
print(str1 + str2);
int a = 123;
a = 45;
print(a);
double b = 123.12;
b = 45.34;
print(b);
bool flag_0 = true;
flag_0 = false;
print(flag_0);
var flag_1 = true;
flag_1 = false;
print(flag_1);
var flag_2 = true;
if (flag_2) {
print('真');
} else {
print('假');
}
var str3 = '123';
var num4 = 123;
if (str3 == num4) {
print('真');
} else {
print('假');
}
var str4 = 456;
var num5 = 456;
if (str4 == num5) {
print('真');
} else {
print('假');
}
var list0 = new List();
list0.add('zhangsan');
list0.add('lisi');
print(list0);
var list1 = ['1', '2', '3'];
print(list1);
print(list1.length);
print(list1[1]);
var list2 = new List<Stirng>();
list2.add('liubei');
list2.add(789);
print(list2);
字典1
var person = {
'name': 'zhangsan',
'age': 20,
'work': ['chengxuyuan', 'waimai']
};
print(person);
print(person['name']);
print(person['age']);
print(person['work']);
字典2
var p = new Map();
p['name'] = 'lisi';
p['age'] = 18;
p['work'] = ['1', 'a'];
print(p);
print(p['age']);
判断类型
var str = 123;
if (str is String) {
print('string类型');
} else if (str is int) {
print('int类型');
} else {
print('其他类型');
}
运算表达式
int a = 13;
int b = 5;
print(a + b);
print(a - b);
print(a * b);
print(a / b);
print(a % b);
print(a ~/ b);
var c = a * b;
print(c);
int a = 5;
int b = 3;
print(a == b);
print(a != b);
print(a > b);
print(a < b);
print(a >= b);
print(a <= b);
if (a > b) {
print('a大于b');
} else {
print('a小于b');
}
bool flag = false;
print(!flag);
bool a = true;
bool b = true;
print(a && b);
bool c = false;
bool d = false;
print(c || d);
&&判断
int age = 20;
String sex = '女';
if (age == 20 && sex == '女') {
print('age:$age --- sex:$sex');
} else {
print('no message');
}
||判断
int age = 23;
String sex = '女';
if (age == 20 || sex == '女') {
print('age:$age --- sex:$sex');
} else {
print('no message');
}
int a = 10;
int b = 3;
int c = a + b;
int d=6;
d??=23;
print(d);
int e;
e??=23;
print(e);
var a = 12;
a = a + 10;
print(a);
var b = 13;
b += 10;
print(b);
var c = 4;
c *= 3;
print(c);
bool flag = true;
if (flag) {
print('true');
} else {
print('false');
}
var score = 41;
if (score > 90) {
print('优秀');
} else if (score > 70) {
print('良好');
} else if (score >= 60) {
print('合格');
} else {
print('不合格');
}
var sex = '女';
switch (sex) {
case '女':
print('女');
break;
case '男':
print('男');
break;
default:
print('传入参数');
break;
}
var flag_0 = true;
var c;
if (flag_0) {
c = 'true';
} else {
c = 'false';
}
print(c);
bool flag_1 = false;
String d = flag_1 ? 'true' : 'false';
print(d);
String str_0 = '123';
var num_0 = int.parse(str_0);
print(num_0 is int);
String str_1 = '123.1';
var num_1 = double.parse(str_1);
print(num_1 is double);
String price = '';
try {
var num_2 = double.parse(price);
print(num_2);
} catch (e) {
print(0);
}
var num_3 = 12;
var str = num_3.toString();
print(str is String);
var str = '';
if (str.isEmpty) {
print('str空');
} else {
print('str非空');
}
var str_0;
if (str_0 == null) {
print('str_0空');
} else {
print('str_0非空');
}
var num_1 = 0 / 0;
if (num_1.isNaN) {
print('num_1.isNaN');
}
循环语句
var a = 10;
a++;
print(a);
var b = 10;
b--;
print(b);
var c = a++;
var d = ++c;
print(c);
print(d);
for (int i = 1; i <= 10; i++) {
print(i);
}
for (int i = 1; i <= 10; i++) {
if (i == 4) {
break;
}
print(i);
}
var i = 1;
while (i <= 10) {
i = i++;
print(i);
}
数据集合类型
List
List list = [
'xaingzhao',
'pingguo',
'xigua',
'motuoche',
'qiche',
'chuanzhi'
];
print(list[1]);
list.add('1');
print(list);
print(list.length);
print(list.isEmpty);
print(list.isNotEmpty);
print(list.reversed);
var listed = list.reversed.toList();
print(listed);
print(listed.indexOf('pingguo'));
print(listed.remove('xaingzhao'));
print(listed.removeAt(0));
listed.fillRange(1, 2, 'bbb');
print(listed);
listed.insert(0, 'ccc');
print(listed);
var str = listed.join('-');
print(str);
print(str is String);
var listString = 'a-b-c-d-e';
var list_0 = listString.split('-');
print(list_0);
print(list_0 is List);
Map
Map person = {'name': 'zhangsan', 'age': 20};
print(person);
var m = new Map();
m['name'] = 'list';
print(m);
print(person.keys.toList());
print(person.values.toList());
print(person.isEmpty);
print(person.isNotEmpty);
Map person_0 = {'name': 'zhangsan', 'age': 20};
person_0.addAll({
'work': ['1', '2'],
'height': 160,
});
print(person_0);
print(person_0.remove('height'));
print(person_0);
print(person_0.containsValue('zhangsan'));
var list_0 = ['0', '1', '2', '3', '4', '5'];
for (var i = 0; i < list_0.length; i++) {
print(list_0[i]);
}
for (var item in list_0) {
print(item);
}
list_0.forEach((value) {
print('$value');
});
Map person_0 = {'name': 'zhangsan', 'age': 20};
person_0.forEach((key,value) {
print('$key-$value');
});
List list_1 = [1, 2, 3, 4, 5];
var list_2 = list_1.map((value) {
return value * 2;
});
print(list_2.toList());
var list_3 = list_1.where((value) {
return value > 1;
});
print(list_3.toList());
var list_4 = list_1.any((value) {
return value > 1;
});
print(list_4);
var list_5 = list_1.every((value) {
return value > 1;
});
print(list_5);
set
var s = new Set();
s.addAll([1, 2, 3]);
s.forEach((value)=>print(value));
方法函数
void printInfo() {
print('i am is print');
}
int getNum() {
var num = 2;
return num;
}
String printUserInfo() {
return 'this is str';
}
List getList() {
return [1, 2, 3];
}
int getNumWithNum(int num) {
return num;
}
String getUserInfo(String userName, int age) {
return '姓名:$userName -- 年龄:$age';
}
String handle(String userName, [int age]) {
if (age != null) {
return '年龄不为空 $userName $age';
}
return '年龄为空 $userName';
}
String handle_0(String userName, [int age, String sex = '男']) {
if (age != null) {
return '年龄不为空 $userName $age sex默认参数-性别:$sex';
}
return '年龄为空 $userName sex有值-性别:$sex';
}
bool isEvenNumber(int num) {
if (num % 2 == 0) {
return true;
}
return false;
}
main() {
print(printInfo);
print(getNum);
print(
printUserInfo);
print(
getList);
print(getNumWithNum(100));
print(getUserInfo('fenghanxu', 18));
print(handle('fenghanxu', 18));
print(handle('fenghanxu'));
print(handle_0('fenghanxu', 12));
print(handle_0('fenghanxu', 12, '女'));
print(isEvenNumber(1));
print(isEvenNumber(2));
}
闭包
main() {
fn() {
var a = 123;
return () {
a++;
print(a);
};
}
var b = fn();
b();
}
打印出:124
面向对象
class Animal {
String _name;
int age;
Animal(this._name, this.age);
void printInfo() {
print('${this._name} --- ${this.age}');
}
String getName() {
return this._name;
}
void _run() {
print('这是个私有方法');
}
execRun() {
this._run();
}
}
class Person {
String name;
int age;
Person(this.name, this.age);
Person.now() {
print('i am is a person class');
}
Person.setInfo(String name, int age) {
this.name = name;
this.age = age;
print('${this.name} -- ${this.age}');
}
void printInfo() {
print('${this.name} -- ${this.age}');
}
}
main() {
Person p1 = new Person('fenghanxu', 18);
p1.printInfo();
Person.setInfo('feizai', 12);
}
类方法
class Person {
static String name = 'zhangsan';
static void show() {
print(name);
}
}
main() {
print(Person.name);
Person.show();
}
class Person {
static String name = 'zhangsan';
int age = 20;
static void show() {
print(name);
}
void printInfo() {
print(name);
print(this.age);
show();
}
static void printUserInfo(){
print(name);
show();
}
}
main() {
print(Person.name);
Person.show();
Person p = new Person();
p.printInfo();
Person.printUserInfo();
}
未理解
class Person {
String name = 'zhangsan';
num age = 20;
void printInfo() {
print('${this.name} -- ${this.age}');
}
}
class Web extends Person {}
main() {
Web w = new Web();
print(w.name);
w.printInfo();
}
class Person {
String name;
num age;
Person(this.name, this.age);
void printInfo() {
print('${this.name} -- ${this.age}');
}
}
class Web extends Person {
Web(String name, num age) : super(name, age) {}
}
main() {
Person p = new Person('lisi', 20);
p.printInfo();
Web w = new Web('zhangsan',12);
w.printInfo();
}
class Person {
String name;
num age;
Person(this.name, this.age);
void printInfo() {
print('${this.name} -- ${this.age}');
}
work() {
print('${this.name}在工作....');
}
}
class Web extends Person {
Web(String name, num age) : super(name, age);
run() {
print('run');
}
@override
void printInfo() {
print('name: ${this.name} -- age: ${this.age}');
}
@override
work() {
print('${this.name}重写父类方法.在工作....');
}
}
main() {
Web w = new Web('lisi', 20);
w.printInfo();
w.work();
}
泛型
String getData(String value) {
return value;
}
getData_0(value) {
return value;
}
T getData_1<T>(T value) {
return value;
}
main() {
print(getData_1(21));
print(getData_1('xxx'));
print(getData_1<String>('nihao'));
print(getData_1<int>(12));
}
泛型类
class PrintClass<T> {
List list = new List<T>();
void add(T value) {
this.list.add(value);
}
void printInfo() {
for (var i = 0; i < this.list.length; i++) {
print(this.list[i]);
}
}
}
main() {
PrintClass p = new PrintClass();
p.add(1);
p.add('封');
p.add(3);
p.add('niu');
p.printInfo();
}
泛型接口
abstract class Cache<T> {
getByKey(String key);
void setByKey(String key, T value);
}
class MemoryCache<T> implements Cache<T> {
@override
getByKey(String key) {
return null;
}
@override
void setByKey(String key, T value) {
print('key ${key} value ${value}');
}
}
main() {
MemoryCache m = new MemoryCache<Map>();
m.setByKey('index', {'name': 'zhangsan', 'age': 20});
}
|