简单记录一下学习flutter,需要的dart 语言知识储备
一
// day0 hello world
单行注释 // ;
多行注释 /*内容,可多行*/;
文档注释 /// (/// [name] 姓名)或者 /** */
dart
语法 :面向对象,类型安全语言,支持类型推断。未赋值的变量值null
代码分区{}
分号结束
var 修饰变量
main() 入口
print()打印函数
使用“_”修饰的对象,外部不能访问
常见关键字
final const dynamic void import this class
extends supper override implements
async await yield
代码练习
/// 程序入口
void main(){
print('Hello ,World!');
// 变量
var name = 'Voyager I';
var year = 1977;
var antennaDiamerer = 3.7;
var flybyObjects = ['Jupiter','Saturn','Uranus','Neptune'];
var image = {
'tags':['saturn'],
'url':'//path/to/saturn.jpg'
};
if (year >= 2001){
print('21st century');
}
}
数据类型
运算符 + - * \ 等
== > >= <= ++ 或||
循环分支语句
for
while
if conditions else if
函数格式(官方文档建议:每个函数的参数以及返回值都指定类型)
返回类型 函数名(参数类型 参数名){
coding
return 返回值
}
函数参数和返回值 没有返回值 void ,没有参数 ()
=> (胖箭头)仅包含一条语句的函数,常用匿名函数作为参数传递
flybyObjects.where((name)=>name.contains('turn')).forEach(print);
上例中,展示匿名函数 (name)=> name.contains('turn')
上例中,展示函数作为参数的使用方式,顶层函数print()作为参数传给了forEach()函数
import 导入
模块:import 'dart:math';
包: import 'package:test/test.dart';
文件:import 'test/test.dart';类 class
类的示例代码:(类名Spacecraft,三个属性、两个构造方法、一个方法describe)
/// [name] 属性name
/// [launchDate]
/// [launchYear]
class Spacecraft{
String name;
DateTime? launchDate;
int? get launchYear=>launchDate?.year;
/// [Sepacraft] 构造函数
/// [name] 属性
/// [launchDate] 属性
Spacecraft(this.name,this.launchDate){
}
Spacecraft.unlaunched(String name):this(name,null);
/// [describe] Method
void describe(){
print('Spacecraft: $name');
var launchDate = this.launchDate;
if (launchDate != null){
int years = DateTime.now().difference(launchDate).inDays ~/ 365;
print('Launched:$launchYear ($years years age)');
}else{
print('Unlaunched');
}
}
}
类的使用示例代码:
var voyager = Spacecraft('Voyager I', DateTime(1977,9,5));
voyager.describe();
var voa = Spacecraft.unlaunched('Voyager III');
voa.describe();
扩展类(继承)extends
示例代码:
/// [altitude] 新增属性
class Orbiter extends Spacecraft{
double altitude;
/// 构造方法
/// [name] 属性
/// [launchDate] 属性
/// [altitude] 属性
Orbiter(String name,DateTime launchDate,this.altitude):super(name,launchDate);
}
是否支持多继承:dart 支持单继承
Mixins
Mixin 在多个类层次结构中重用代码,示例:
mixin Piloted{
int astronsuts = 1;
void describeCrew(){
print('Number of astronauts: $astronsuts');
}
}
mixin Piloted{
int astronsuts = 1;
void describeCrew(){
print('Number of astronauts: $astronsuts');
}
}
class PilotedCraft extends Spacecraft with Piloted{
PilotedCraft(super.name,super.launchDate);
PilotedCraft.unlaunched(String name):super.unlaunched(name);
// ……
}
var mixP = PilotedCraft("name", DateTime(1999,10,10));
mixP.describe();
mixP.describeCrew();
接口和抽象类 implements
dart没有interface 关键字,所有的类都隐式定义了一个接口,任意类都可以作为接口被实现
示例代码:
class MockSpaceship implements Spacecraft{
// ...
}
抽象类:可以包含抽象方法
抽象方法:不含具体方法的方法
abstract class Describable{
void describe();
void describeWithEmphasis(){
print('=============');
describe();
print('=============');
}
}
任意一个扩展了Describable的类都拥有describeWithEmphasis()方法,这个方法会调用实现类中实现的describe()方法。(了解一下,后续补充代码理解)
这里看官方文档:https://dart.cn/samples
不是很理解,稍后在看吧
异步 async await
避免回调地狱(CallBack Hell),代码更具可读性
异常 throw
有机会去了解一下:
栈追踪、rethrow、Error、Exceptio