美文网首页
dart全集

dart全集

作者: 大写的空气 | 来源:发表于2019-10-28 14:46 被阅读0次

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方法外其他

    

相关文章

网友评论

      本文标题:dart全集

      本文链接:https://www.haomeiwen.com/subject/twrrvctx.html