要学Flutter必先学Dart,Dart和Java的语法很像,学过Java的人很快就能入手

Dart下载地址https://dart.dev/get-dart

VSCode下载地址https://code.visualstudio.com/

VSCode装好以后,安装插件Chinese汉化插件、Dart插件、code runner插件

1.基础

main(){
print('你好 dart');
}

var会自动推断变量类型,赋值类型不一致会报错

常量用const或final定义,final是懒加载的,编译时不赋值,运行时才赋值

* 三个单引号或三个双引号允许字符串内部换行,一个单引号和双引号都不行

void main(){
String str = '''
这是第一行
这是第二行
这是第三行
''';
print(str);
}

* 字符串的拼接

void main(){
String str1 = "你好";
String str2 = 'Dart';
print(str1+str2);
print("$str1$str2");
}

数值只有int和double两个类型

* map字典类型

void main(){
var person={
"name":"张三",
"age":20
};
print(person["name"]);
}

* 判断变量类型

void main(){
var str = '1234';
if(str is String){
print('str是String类型');
}
}

* 非空不赋值

void main(){
int b;
//如果b为空,才赋值
b??=3;
print(b);
b??=6;
print(b);
}
void main(){
var a;
var b=a??10;
print(b);
}
打印10

* 类型转换

void main(){
String str = '111';
var myNum = int.parse(str);
print(myNum is int);
}
void main(){
List myList =['香蕉','苹果','西瓜'];
myList.fillRange(1,2,'梨子');
print(myList);
}
输出[香蕉, 梨子, 西瓜]

* 数组转字符串

void main(){
List myList =['香蕉','苹果','西瓜'];
var str = myList.join('-');
print(str);
}
输出香蕉-苹果-西瓜

* 条件判断

any只要有一个值符合条件就返回true,every必须所有值都符合条件才返回true

void main(){
List myList =[1,3,4,6,7,9,10];
var newList = myList.where((value){
return value>5;
});
print(newList.toList());
}
输出[6, 7, 9, 10]
void main(){
List myList =[1,3,4,6,7,9,10];
var newList = myList.any((value){
return value>5;
});
print(newList);
}
输出true
void main(){
List myList =[1,3,4,6,7,9,10];
var newList = myList.every((value){
return value>5;
});
print(newList);
}
输出false

* 迭代

void main(){
var s=new Set();
s.addAll([1,22,333]);
s.forEach((value)=>print(value));
}
输出
1
22
333

* 可选参数,默认参数

void main(){
print(printUserInfo("张三"));
} String printUserInfo(String username,[String sex='男',int age]){
if(age!=null){
return "姓名:$username--年龄:$age--性别:$sex";
}
return "姓名:$username--年龄保密--性别:$sex";
}
输出 姓名:张三--年龄保密--性别:男

* 把方法当做参数来传递

fn1(){
print('fn1');
} fn2(a){
a();
} main(){
fn2(fn1);
}
输出 fn1

* 箭头函数

main(){
List list=['苹果','香蕉','西瓜'];
list.forEach((value)=>print(value));
list.forEach((value)=>{
print(value)
});
}

* 匿名函数

main(){
var printNum=(){
print(123);
};
printNum();
}

* 自执行方法

  ((n){
print('我是自执行方法 $n');
})(12);

全局变量会常驻内存,污染全局;局部变量不常驻内存,会被垃圾机制回收,不污染全局

* 闭包能够常驻内存,且不污染全局

main(){
fn(){
var a =123;
return(){
a++;
print(a);
};
} var b = fn();
b();
b();
b();
} 输出:
124
125
126

* 命名构造函数

class Person{
String name;
int age;
//默认构造函数的简写
Person(this.name,this.age);
//命令构造函数
Person.now(){
print('我是命名构造函数');
}
//命令构造函数
Person.setInfo(String name,int age){
this.name = name;
this.age = age;
}
void printInfo(){
print("${this.name}---${this.age}");
}
}
main(){
Person p1 = new Person('张三',20);
p1.printInfo(); Person p2 = new Person.setInfo('李四',30);
p2.printInfo();
}

变量前面加下划线_,就申明为私有变量了;方法前面加下划线_,就申明为私有方法了

* 通过访问属性的方式访问方法

class Rect{
num height;
num width;
Rect(this.height,this.width);
get area{
return this.height*this.width;
}
set areaHeight(value){
this.height = value;
}
}
main(){
Rect r = new Rect(10, 4);
r.areaHeight = 6;
print("面积:${r.area}");
}

初始化属性

class Rect{
num height;
num width;
Rect():height=2,width=10{ }
get area{
return this.height*this.width;
}
set areaHeight(value){
this.height = value;
}
}
main(){
Rect r = new Rect();
print("面积:${r.area}");
}

2.属性

* 继承

class Person{
String name;
num age;
Person(this.name,this.age);
void printInfo(){
print("${this.name}---${this.age}");
}
} class Student extends Person{
String sex;
Student(String name,num age,String sex) : super(name,age){
this.sex = sex;
}
@override
void printInfo(){
print("${this.name}---${this.age}---${this.sex}");
//调用父类的方法
super.printInfo();
}
} main(){
var p;
//当p为null时不会执行
p?.printInfo();
p = new Person('张三', 20);
//强制转换类型
(p as Person).printInfo();
//连缀操作
p..name="李四"
..age=30
..printInfo();
//子类继承及复写
Student s = new Student('王五', 10,'男');
s.printInfo();
}

dart没有interface关键字,可以用abstract关键字

* mixins相当于多继承

class A{
void printA(){
print("A");
}
} class B{
void printB(){
print("B");
}
} class C with A,B{ } void main(){
var c = new C();
c.printA();
c.printB();
}

作为mixins的类不能有构造函数,不能继承其他类,而且如果with顺序不同,相同方法会覆盖

3.调库

* 调用内置库

import 'dart:convert';
import 'dart:io';
import 'dart:math'; void main() async{
print(min(12, 14));
var result = await getDataFromZhihuAPI();
print(result);
} getDataFromZhihuAPI() async{
//1.创建HttpClient对象
var httpClient = new HttpClient();
//2.创建Uri对象
var uri = new Uri.http('news-at.zhihu.com', '/api/3/stories/latest');
//3.发起请求,等待请求
var request = await httpClient.getUrl(uri);
//4.关闭请求,等待响应
var response = await request.close();
//5.解码响应的内容
return await response.transform(utf8.decoder).join();
}

调用asyc必须要用await

* 第三方库的地址是https://pub.dev

配置文件pubspec.yaml

name: XXX
description: A new flutter module project
dependencies:
http: ^0.12.0+2
date_format: ^1.0.6

cmd命令行执行pub get下载库

例子

import 'dart:convert' as convert;//重命名
import 'package:http/http.dart' as http;//重命名 main(List<String> arguments) async {
// This example uses the Google Books API to search for books about http.
// https://developers.google.com/books/docs/overview
var url = "https://www.googleapis.com/books/v1/volumes?q={http}"; // Await the http get response, then decode the json-formatted responce.
var response = await http.get(url);
if (response.statusCode == 200) {
var jsonResponse = convert.jsonDecode(response.body);
print(jsonResponse);
var itemCount = jsonResponse['totalItems'];
print("Number of books about http: $itemCount.");
} else {
print("Request failed with status: ${response.statusCode}.");
}
}

导库使用as重命名可以解决冲突的问题,导库后使用show或hide可以限制部分引入

欢迎关注我的微信公众号:安卓圈

Dart入门的更多相关文章

  1. Flutter与Dart 入门

    Flutter简介 Flutter是google推出的,一个使用Dart语言开发的跨平台移动UI框架,通过自建绘制引擎,能高性能.高保真地进行Android和IOS开发. Flutter是什么 Flu ...

  2. dart入门指南

    近来,flutter的热度在上升.flutter应用的主要开发语言是dart, 因此,欲练flutter, 必先了解dart. dart是由google开发的编程语言,可用于开发移动应用,桌面应用,h ...

  3. Dart 语言简易教程系列

    google Fuchsia系统 及 dart语言简介 在 InteIIiJ IDEA 中搭建 Dart 的开发环境 Dart Linux 开发环境搭建 Dart 语言简易教程(一) Dart 语言简 ...

  4. Flutter学习笔记与整合

    1.Dart 面向对象语言,与java类比学习 非常适合移动和Web应用程序 1.dart官网 2.Dark2 中文文档 3.Dart语法学习 4.极客学院Dart学习 5.Flutter与Dart ...

  5. Flutter免费(视频)教程汇总

    Flutter学习导航 Flutter简介: Flutter可以轻松快速地构建漂亮的移动应用程序. Flutter是谷歌的移动应用SDK,用于短时间内在iOS和Android上制作高质量的原生界面应用 ...

  6. Dart编程语言入门

    Dart基础入门语法介绍,详细说明可以查看相关视频<Dart编程语言入门>. 变量与常量 变量 1.使用 var 声明变量,默认值为 null var a;//null a = 10; 2 ...

  7. Dart语言入门(一)

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

  8. dart快速入门教程 (8)

    9.dart中的库 9.1.自定义库 自定义库我们在前面已经使用过了,把某些功能抽取到一个文件,使用的时候通过import引入即可 9.2.系统内置库 以math库为例: import "d ...

  9. dart快速入门教程 (7.4)

    7.12.多态 多态字面上理解就是多种状态,通俗的说,多态表现为父类定义一个方法不去实现,子类继承这个方法后实现父类的方法,这个方法有多种表现 // import 'person.dart'; voi ...

随机推荐

  1. nohup 、&、 2>&1 命令分析

    nohup的意思是不间断的运行,&的意思是后台运行,2>&1的意思是标准输出和错误输出都重定向到同一个文件. 简单地说nohup运行时即使关掉控制台,它该运行还是运行. http ...

  2. 搭建unity客户端

    1.新建个unity的项目ChatClient 2.在unity的Main Camera下挂载个脚本PhotonServerEngine做为与服务器端通信的脚本 3.在PhotonServerEngi ...

  3. hive的常用函数工作总结

    1.concat_ws 它是一个特殊形式的 CONCAT() concat_ws(分隔符,参数1,参数2.......) as 字段 2.split 返回值为一个数组 a.基本用法: 例1:split ...

  4. Java逆变(Covariant)和协变(Contravariant)

    1. 定义 逆变和协变描述的经过类型变换后的类型之间的关系.假如A和B表示类型,f表示类型变换,A ≤B表示A是B的子类型,那么 如果A ≤B,f(A) ≤f(B),那么f是协变 如果A ≤B,f(B ...

  5. 搭建java环境时,DOS输入java有反应,javac没反应的解决办法。

    2018-11-12 搭java环境踩了许多坑,之前搭环境时在命令台输入java有反应,javac没反应,后来试了很多方法都一样,然后就把java的所有的环境变量都删了,在控制面板里的卸载程序把所有的 ...

  6. 11.04Test

    11.04Test 查看请点个赞 转载请注明出处(~不然~) 题目 描述 做法 \(BSOJ5143\) 要求给\(M\)个通道染色,使得同色通道不能相交 转为矛盾模型,\(2-sat\)or二分图染 ...

  7. mysql和sqliet连接

    Python里Django框架数据库要配置1.setting已经自己配置好2.需要自己连接.找到setting里DATABASES进行连接自己数据库MySQL数据库连接 model里创建数据表就是Dj ...

  8. typedi 强大的javascript以及typescript 依赖注入框架

    typedi 是typestack团队提供的依赖注入解决方案,对于typescript 我们可以使用注解的开发方式,官方的文档也比较详细 javascript 使用 基于函数的服务注入 var Ser ...

  9. 15-网页,网站,微信公众号基础入门(网页版MQTT,做自己的MQTT调试助手)

    https://www.cnblogs.com/yangfengwu/p/11198572.html 说一下哈,,如果教程哪里看不明白...就去自己百度补充哪一部分,,学习不是死记硬背,需要会学习,永 ...

  10. JAVA基础--MySQL(二)

     数据库约束 1.基础限制 ① 单一表内字节量总和不能超过65535,null 占用一个字节空间 ② varchar存储255 以内字节占用一个字节表示长度,255以上自己则占用两个字节表示长度 ③ ...