dart全集

https://www.bilibili.com/video/av52490605?p=17  //教学视频

一个基础Dart程序

printNumber(num aNumber){

    print('The number is $aNumber');

}

//主入口

main() {

    var number = 42;

    printNumber(number);

}

未初始化的变量具有null的初始值.


内置类型

数字  number;        字符串 strings;        布尔 booleans;    列表 lists;   图 maps  符号 symbols

字符串转数字   int.parse('1')  double.parse('1.1')

数字转字符串   1.toString()    3.14159.toStringAsFixed(2)//保留两位小数点,四舍五入

'$variable'   //输出变量 variable的值


函数

仅含一个表达式的方法,可以简写成

void printNumber(num number) => 

    print('The number is $number.');

可选参数可以是可选位置参数或者可选命名参数,但不能既是可选位置参数又是可选命名参数。

/// 把 bold 和 hidden 作为参数的值,并将默认值设为 false.

enableFlags({bool bold: false, bool hidden: false}) {

    // 可选命名参数

}

// bold 将会是 true, hidden 则是false

enableFlags(bold:true);

把一组函数的参数放在[]之内可以把它们标记为可选位置参数

Sring say(String from, String msg, [String device]) {

    var result = '$from says #msg';

    if (device != null) {

        result = '$result with a $device';

    }

    return result;

}

assert(say('Bob', 'Howdy') == 'Bob says Howdy');

assert(say('Bob', 'Howdy', 'smoke signal') ==  'Bob says Howdy with a smoke signal');

可选位置参数使用=来声明默认值:


if (emp is Person) { // Type check

  emp.firstName = 'Bob';

}

(emp as Person).firstName = 'Bob';


异常处理

try {

  breedMoreLlamas();

} on OutOfLlamasException {

  // 一个具体异常

  buyMoreLlamas();

} on Exception catch (e) {

  // 任意一个异常

  print('Unknown exception: $e');

} catch (e) {

  // 非具体类型

  print('Something really unknown: $e');

}

创建一个对象,你可以使用 new 关键词并在其后跟上一个构造函数。

var jsonData = JSON.decode('{"x":1, "y":2}');

//用 Point() 创建一个点。

var p1 = new Point(2, 2);

// 用 Point().fromJson() 创建一个点。

var p2 = new Point.fromJson(jsonData);

如果父类没有构造函数,则必须手动调用父类的构造函数中的一个。在冒号(:)之后、构造函数之前指定父类的构造函数

class Person {

  Person.fromJson(Map data) {

    print('in Person');

  }

}

class Employee extends Person {

  // Person 没有默认构造函数;

  // 你必须调用 super.fromJson(data).

  Employee.fromJson(Map data) : super.fromJson(data) {

    print('in Employee');

  }

}

main() {

  var emp = new Employee.fromJson({});

  // Prints:

  // in Person

  // in Employee

}

当实现一个使用 factory 关键词修饰的构造函数时,这个构造函数不必创建类的新实例。

setters 和 Getters

class Rectangle {

  num left;

  num top;

  num width;

  num height;

  Rectangle(this.left, this.top, this.width, this.height);

  // 定义两个计算属性: right and bottom.

  num get right            => left + width;

      set right(num value)  => left = value - width;

  num get bottom            => top + height;

      set bottom(num value) => top = value - height;

}

main() {

  var rect = new Rectangle(3, 4, 20, 15);

  assert(rect.left == 3);

  rect.right = 12;

  assert(rect.left == -8);

创建一个编译时常量的列表,请在列表文字之前添加const

var constantList = const [1, 2, 3]; // constantList[1] = 1; // Uncommenting this causes an error.

使用扩展运算符(...)将列表的所有元素插入另一个列表

var list = [1,2,3];

var list2 = [0,...list];

assert(list2.length == 4);

扩展运算符右侧的表达式可能为null,则可以通过使用支持null的扩展运算符(...?)来避免异常

var list; var list2 = [0, ...?list]; assert(list2.length == 1);

var nav = [ 'Home', 'Furniture', 'Plants', if (promoActive) 'Outlet' ];

var listOfInts = [1, 2, 3]; 

var listOfStrings = [ '#0', for (var i in listOfInts) '#$i' ]; 

assert(listOfStrings[1] == '#1');

map初始化   var  names = {};  Map()

set初始化   var  names = <String>{};   或   Set<String>names = {};

级联(..)运算符可用于通过对象发出一系列调用

class Student { 

void test_method() { print("This is a test method"); } 

void test_method1() { print("This is a test method1"); } }  

void main() { 

    new Student() 

    ..test_method()

     ..test_method1();

 }


Dart包

https://pub.dev/packages

https://pub.flutter-io.cn/packages

https://pub.dartlang.org/flutter/

每个Dart应用程序都有一个pubspec.yaml文件,其中包含对其他库的应用程序依赖性以及应用程序的元数据,如应用程序名称,作者,版本和描述。

pub get    获取应用程序所依赖的所有包

pub upgrade 将所有依赖升级到最新版本

pub build 用于构建web应用程序,将创建一个构建文件夹,其中包含所有相关脚本

pub help

Dart Typedef

typedef manyOperation(int firstNo, int secondNo);   //

add (int firstNo, int second){ print("add result is ${firstNo + second}") }

subtract(int firstNO, int second){ print("subtract result is ${firstNo - second}") }

divide (int firstNo, int second){ print("divide result is ${firstNo / second}") }

calculator(int a, int b, manyOperation oper){

    print("Inside calculator");

    oper(a, b);

}

main(){    calculator(5,5,add);calculator(5,5,subtract);calculator(5,5,divide);


自定义库

如自定义一个calculator.dart库

library calculator_lib; 

 import 'dart:math'; 

//import statement after the libaray statement 

 int add(int firstNumber,int secondNumber){ print("inside add method of Calculator Library ") ; return firstNumber+secondNumber; }

 int modulus(int firstNumber,int secondNumber){ print("inside modulus method of Calculator Library ") ; returnfirstNumber%secondNumber; }

 int random(int no){ return new Random().nextInt(no); }

import 'calculator.dart'; 

void main() { 

var num1 = 10; var num2 = 20; var sum = add(num1,num2); var mod =modulus(num1,num2); var r = random(10); 

print("$num1 + $num2 = $sum");

 print("$num1 % $num2= $mod");

print("random no $r"); 

}

如果导入两个具有冲突标识符的库,则可以为一个或两个库指定前缀。使用as关键字指定前缀。

import 'library_uri' as prefix


//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/dart/dart_programming_data_types.html 


List myList = [1,2,3,5,6,7];

var newList = myList.where((value){

    return value > 5;

})

print(newList.toList());  //返回数字中值大5的值

myList.any((value){ return value > 5}) ;  //只要集合中有大于5,返回ture    every方法为全部满足条件返回true

Web(String name, num age, String sex) : super(name, age){};  //冒号后面的将属性传递到父类属性


一个类可以实现多个接口,如下

abstract class A{ printA(); }

abstract class B{ printB(); }

class C implements A,B {

    @override

    printA(){}

    @override

    printB() {}

}

mixins可以实现类似多继承方法

class C with A,B{}  //c中包括  A,B中所有方法与属性。  A,B中不能有构造函数,也不能继承其他类.  如A,B中有同样的方法,B方法把A方法替换

异步方法举例

import 'dart:io';

import 'dart:convert';

void main() async{

    var result = await getDataFormZhihuApi();  //同步

    print(result);

}

getDataFormZhihuApi() async{

    //创建http对象

    var httpClient = HttpClient();

    //创建uri对象

    var uri = Uri.http('news-at.zhihu.com', 'api/3/stories/latest');

    //请求,等待请求

    var request = await httpClient.getUrl(uri);

    //关闭请求,等待响应

    var response = await request.close();

    //解码内容

    return await response.transform(utf8.decoder).join();

}


//假如  Person1/Person2文件中都存在Person类,为了避免类名冲突,可以通过as关键字重命名类名,使用时用重命名后的字符串替代原类名

import 'lib/Person1.dart';

import 'lib/Person2.dart' as lib;

import 'lib/Person2.dart' show xxmethod;  //只引用文件中xxmethod方法

import 'lib/Person2.dart' hide xxmethod;  //引用文件中除xxmethod方法外其他

    

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容