Dart 14-Day

Dart 14-Day,第1张

Dart
Dart基础知识的时候基本上都是在一个文件里面编写Dart代码的,但实际开发中不可能这么写,模块化很重要,所以这就需要使用到库的概念。在Dart中,库的使用时通过import关键字引入的。library指令可以创建一个库,每个Dart文件都是一个库,即使没有使用library指令来指定。Dart中的库主要有三种: 1、我们自定义的库 import 'lib/xxx.dart';2、系统内置库 import 'dart:math';import 'dart:io';import 'dart:convert';3、Pub包管理系统中的库 Page 1 | Top packagesPage 1 | Top packagesSearch results for sdk:flutter.

1、需要在自己想项目根目录新建一个pubspec.yaml

2、在pubspec.yaml文件 然后配置名称 、描述、依赖等信息

3、然后运行 pub get 获取包下载到本地

4、项目中引入库 import 'package:http/http.dart' as http; 看文档使用

自定义库
// 使用自定义库

// lib/Animal.dart

class Animal {
  String _name; //私有属性
  int age;
  //默认构造函数的简写
  Animal(this._name, this.age);

  void printInfo() {
    print("${this._name}----${this.age}");
  }

  String getName() {
    return this._name;
  }

  void _run() {
    print('这是一个私有方法');
  }

  execRun() {
    this._run(); //类里面方法的相互调用
  }
}

import 'lib/Animal.dart';

main() {
  var a = new Animal('小黑狗', 20);
  print(a.getName());
}
内置库httpClient
// 内置库httpClient请求数据

import 'dart:io';
import 'dart:convert';

void main() async {
  var result = await getDataFromZhihuAPI();
  print(result);
}

//api接口: 
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();
}
async和await

只有async方法才能使用await关键字调用方法

如果调用别的async方法必须使用await关键字

async是让方法变成异步。

await是等待异步方法执行完成。

void main() async {
  var result = await testAsync();
  print(result);
}

// 异步方法
testAsync() async {
  return 'Hello async';
}
pub包管理系统 1、从下面网址找到要用的库 Page 1 | Top packagesPage 1 | Top packagesSearch results for sdk:flutter.2、创建一个pubspec.yaml文件,内容如下 name: xxxdescription: A new flutter module project.dependencies:http: ^0.12.0+2date_format: ^1.0.6

3、配置dependencies

4、运行pub get 获取远程库

5、看文档引入库使用

// pubspec.yaml
name: xxx  // 名字
description: A new flutter module project. // 描述
dependencies: // 依赖
  http: ^0.12.0+2
  date_format: ^1.0.6

import 'dart:convert' as convert;
import 'package:http/http.dart' as http;
import 'package:date_format/date_format.dart';

main() async {
  var url ="";

  // 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);
  } else {
    print("Request failed with status: ${response.statusCode}.");
  }

  print(formatDate(DateTime(1989, 2, 21), [yyyy, '*', mm, '*', dd]));
}
冲突解决 当引入两个库中有相同名称标识符的时候,如果是java通常我们通过写上完整的包名路径来指定使用的具体标识符,甚至不用import都可以,但是Dart里面是必须import的。当冲突的时候,可以使用as关键字来指定库的前缀
// 如下例子所示:

    import 'package:lib1/lib1.dart';
    import 'package:lib2/lib2.dart' as lib2;

    Element element1 = new Element();           // Uses Element from lib1.
    lib2.Element element2 = new lib2.Element(); // Uses Element from lib2.
// lib/Person1.dart
class Person {
  String name;
  int age;
  //默认构造函数的简写
  Person(this.name, this.age);

  Person.setInfo(String name, int age) {
    this.name = name;
    this.age = age;
  }

  void printInfo() {
    print("Person1:${this.name}----${this.age}");
  }
}

// lib/Person2.dart
class Person {
  String name;
  int age;
  //默认构造函数的简写
  Person(this.name, this.age);

  Person.setInfo(String name, int age) {
    this.name = name;
    this.age = age;
  }

  void printInfo() {
    print("Person2:${this.name}----${this.age}");
  }
}

import 'lib/Person1.dart';
import 'lib/Person2.dart' as lib;

main(List args) {
  Person p1 = new Person('张三', 20);
  p1.printInfo();

  lib.Person p2 = new lib.Person('李四', 20);
  p2.printInfo();
}
部分导入

如果只需要导入库的一部分,有两种模式:

模式一:只导入需要的部分,使用show关键字,如下例子所示:

import 'package:lib1/lib1.dart' show foo;

模式二:隐藏不需要的部分,使用hide关键字,如下例子所示:

import 'package:lib2/lib2.dart' hide foo;

// lib/myMath.dart

void getName() {
  print('张三');
}

void getAge() {
  print(20);
}

void getSex() {
  print('男');
}

// import 'lib/myMath.dart' show getAge;
import 'lib/myMath.dart' hide getName;

void main() {
//  getName();
  getAge();
}
延迟加载

也称为懒加载,可以在需要的时候再进行加载。

懒加载的最大好处是可以减少APP的启动时间。

懒加载使用deferred as关键字来指定

import 'package:deferred/hello.dart' deferred as hello;

// 当需要使用的时候,需要使用loadLibrary()方法来加载:

greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

 Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.A new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your teamhttps://serious-lose.notion.site/Dart-14-Day-96d8d7ece6c94b2c8a34cfc62212ef37

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993694.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存