一、介绍
- Flutter是Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过Dart语言开发App,一套代码同时运行在iOS和Android平台。Flutter提供了非常丰富的组件、接口,开发者可以很快地为Flutter添加native扩展。同时Flutter还使用Native引擎渲染视图,为用户提供良好的体验。
- 特点:
跨平台自绘绘擎
高性能
二、开发环境配置
- 获取Flutter SDK并解压缩
官网地址:
https://docs.flutter.dev/release/archive?tab=windows#windows
也可以从官方的github上下载:
https://github.com/flutter/flutter/releases - 设置环境变量
在path中添加flutter\bin的全路径 - 运行flutter doctor命令,检查环境是否有未安装的依赖
hello world
- 为android studio添加Flutter插件
- 使用android studio开发第一个Flutter应用
dart开发环境配置
下载网址:https://gekorm.com/dart-windows/
或https://dart.dev/get-dart/archive
三、dart
1.变量与常量
void main(){
//var声明
var username="quan";
username="good";
// dynamic a="good job";
// Object b="good job";
// print(a.length);
// print(b.length);
// final psw="good";
// psw="job";
//
// const psw="good";
// psw="job";
}
2.数据类型
void main(){
// num: int and double
int abc=110;
int a=int.parse('119');
double cde=220.111;
double b=double.parse('111.222');
//String
String good=123.toString();
String job=123.22322.toStringAsFixed(2);
print(job);
//bool
//bool result=123>110;
bool result=1=='1';
print(result);
//List 数据类型
List list=[1,3,5,7,9];
//List newList=new List();-------已弃用
//newList.add(2);
//newList.addAll([4,6,8,10]);//将数组中的所有元素添加进数组中
//print(newList);
//print(newList.length);
//print(newList.first);
//print(newList.last);
//print(newList[2])
//Map 对象类型
Map obj={
'x':1,
'y':2,
'z':3
};
// Map obj2=new Map();------已弃用
// obj2['x']=1;
// obj2['y']=2;
print(obj);
//print(obj2);
print(obj.containsKey('x'));//是否包含某个key
print(obj.containsKey('a'));
obj.remove('y');
print(obj);
}
3.Function
void main(){
String username=getUserName();
String userInfo=getPersonInfo(111);
print(userInfo);
int age=addAge(111);
print(age);
int age2=addAge2(age1:119);
print(age2);
var list=["abc","cde","def"];
//匿名函数
list.forEach((str) {
print(str);
});
}
String getUserName(){
return "hello world";
}
String getPersonInfo(int userId){
Map userInfoObj={
"111":"zhangsan",
"222":"lisi"
};
return userInfoObj[userId.toString()];
}
//可选参数
int addAge(int age1,[int age2=0]){
return age1+age2;
}
//默认值
int addAge2({int age1=0,int age2=0}){
return age1+age2;
}
4.类与继承
void main(){
var p=new Person(23,"zhangsan");
// p.age=123;
print(p.age);
print(p.name);
p.sayHello();
var w=new Worker(18, "lisi", 3500);
w.sayHello();
}
//类
class Person{
int age=0;
String name="";
//构造函数
Person(int age,String name){
this.age=age;
this.name=name;
}
void sayHello(){
print("my name is:"+this.name);
}
}
//继承
class Worker extends Person{
//Worker(super.age, super.name);
int salary=0;
//扩展
Worker(int age,String name,int salary):super(age,name){
this.salary=salary;
}
//重写
//告诉编译器/程序员这是一个重写方法
void sayHello(){
super.sayHello();
print("my salary is:"+this.salary.toString());
}
}
5.mixin与抽象类
dart无法多继承
void main(){
var p=new Person(18,"zhangsan");
p.eat();
p.sleep();
p.sayHello();
}
mixin Eat{
void eat(){
print("eat");
}
// void sayHello(){
// print("say Hello in eat");
// }
}
mixin Sleep{
void sleep(){
print("sleep");
}
// void sayHello(){
// print("say Hello in sleep");
// }
}
//抽象类,不能被实例化
abstract class Animal{
//抽象方法,需在实例中实现
void have_a_baby();
}
//类
class Person extends Animal with Eat,Sleep{
int age=0;
String name="";
//构造函数
Person(int age,String name){
this.age=age;
this.name=name;
}
//混合里如果有同名方法,先找自身类的方法,后找混合的最后一个类的方法
void sayHello(){
print("my name is:"+this.name);
}
void have_a_baby() {
print("have a baby");
}
}
6.库
外部库需要在pubspec.yaml文件中写明加载依赖,然后在终端执行pub get
外部库网址:https://pub.dev
//自写库
import 'pkg/Calc.dart';
//外部库
import 'package:http/http.dart' as http;
//dart自身库 延时加载
import 'dart:math' deferred as math;
// 如果pub get总是下载失败的话,可以使用国内的镜像
// 设定环境变量:PUB_HOSTED_URL=https://pub.flutter-io.cn
void main () async {
int result = add(3,4);
print(result);
var m=new Calc(10, 5);
m.minus();
// var url = Uri.https('example.com', 'whatsit/create');
// var response = await http.post(url, body: {'name': 'doodle', 'color': 'blue'});
// print('Response status: ${response.statusCode}');
// print('Response body: ${response.body}');
//
// print(await http.read(Uri.https('www.baidu.com')));
// var r=new Random();
// print(r.nextInt(10));
await math.loadLibrary();
var r=new math.Random();
print(r.nextInt(10));
}