Dart入门
要学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入门的更多相关文章
- Flutter与Dart 入门
		Flutter简介 Flutter是google推出的,一个使用Dart语言开发的跨平台移动UI框架,通过自建绘制引擎,能高性能.高保真地进行Android和IOS开发. Flutter是什么 Flu ... 
- dart入门指南
		近来,flutter的热度在上升.flutter应用的主要开发语言是dart, 因此,欲练flutter, 必先了解dart. dart是由google开发的编程语言,可用于开发移动应用,桌面应用,h ... 
- Dart 语言简易教程系列
		google Fuchsia系统 及 dart语言简介 在 InteIIiJ IDEA 中搭建 Dart 的开发环境 Dart Linux 开发环境搭建 Dart 语言简易教程(一) Dart 语言简 ... 
- Flutter学习笔记与整合
		1.Dart 面向对象语言,与java类比学习 非常适合移动和Web应用程序 1.dart官网 2.Dark2 中文文档 3.Dart语法学习 4.极客学院Dart学习 5.Flutter与Dart ... 
- Flutter免费(视频)教程汇总
		Flutter学习导航 Flutter简介: Flutter可以轻松快速地构建漂亮的移动应用程序. Flutter是谷歌的移动应用SDK,用于短时间内在iOS和Android上制作高质量的原生界面应用 ... 
- Dart编程语言入门
		Dart基础入门语法介绍,详细说明可以查看相关视频<Dart编程语言入门>. 变量与常量 变量 1.使用 var 声明变量,默认值为 null var a;//null a = 10; 2 ... 
- Dart语言入门(一)
		Dart 语言介绍 Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言,允许用户通过 Chromium 中所整合的虚拟机(Dart VM)直接运行 Dart 语言编写的程序 ... 
- dart快速入门教程 (8)
		9.dart中的库 9.1.自定义库 自定义库我们在前面已经使用过了,把某些功能抽取到一个文件,使用的时候通过import引入即可 9.2.系统内置库 以math库为例: import "d ... 
- dart快速入门教程 (7.4)
		7.12.多态 多态字面上理解就是多种状态,通俗的说,多态表现为父类定义一个方法不去实现,子类继承这个方法后实现父类的方法,这个方法有多种表现 // import 'person.dart'; voi ... 
随机推荐
- Django如何与JQuery进行数据通信?
			index.html: 下面form的action属性表示当提交表单时,向何处发送表单数据 <script src="https://code.jquery.com/jquery-3. ... 
- 洛谷P3810 陌上花开(CDQ分治)
			洛谷P3810 陌上花开 传送门 题解: CDQ分治模板题. 一维排序,二维归并,三维树状数组. 核心思想是分治,即计算左边区间对右边区间的影响. 代码如下: #include <bits/st ... 
- Linux libcurl安装及注意事项
			一.下载 官网下载地址 : https://curl.haxx.se/download.html 选择最新的一个即可. 二.安装 1.解压 下载到的压缩包为curl-7.51.0.tar.gz,使用 ... 
- @NotBlank注解地正确使用
			@NotNull:不能为null,但可以为empty @NotEmpty:不能为null,而且长度必须大于0@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必 ... 
- Beta 冲刺随笔汇总
			作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 项目Beta冲刺(团队) 团队名称 基于云的胜利冲锋队 作业目标 汇总随笔 团队信息 团队名称:基于云的胜利冲锋队 ... 
- 20180520模拟赛T1——math
			[问题描述] 小美有 n 个点 m 条边. 让你给每个点一个正整数编号. 每条边有两个属性,相连的两个点的编号的 GCD 和 LCM. 题目保证整张图连通. 让你构造出一个编号. [输入格式] 从文件 ... 
- 牛客NOIP暑期七天营-提高组2C:滑块(平衡树) (这里rope骗分)
			A:hash 或者 map 或者trie. #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) usin ... 
- 记一次PATH环境变量设置不生效的问题
			问题:卸载原有版本jdk后,如下图在/etc/profile中配置新的环境变量且source /etc/profile 生效配置后,JAVA_HOME值都正确,但PATH变量值还是不对 echo $P ... 
- Kubectl操作命令
			Kubectl 自动补全 yum install -y bash-completion source /usr/share/bash-completion/bash_completion $ sour ... 
- static在Swift 中表示 “类型范围作用域”
			In Swift, however, type properties are written as part of the type’s definition, within the type’s o ... 
