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 packages
      • Page 1 | Top packages
      • Search results for sdk:flutter.

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

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

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

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

自定义库

// 使用自定义库// lib/Animal.dartclass 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接口: <http://news-at.zhihu.com/api/3/stories/latest>
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 packages
    • Page 1 | Top packages
    • Search results for sdk:flutter.
  • 2、创建一个pubspec.yaml文件,内容如下
    • name: xxx
    • description: A new flutter module project.
    • dependencies:
    • http: ^0.12.0+2
    • date_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+2date_format: ^1.0.6import 'dart:convert' as convert;
import 'package:http/http.dart' as http;
import 'package:date_format/date_format.dart';main() async {var url ="<http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1>";// 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<String> 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.dartvoid 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

Dart 14-Day相关推荐

  1. 【错误记录】Flutter 使用 MediaQuery 适配全面屏报错 ( No MediaQuery widget ancestor found. )

    文章目录 一.报错信息 二.解决方案 一.报错信息 需要使用 MediaQuery 获取当前的 Padding ; import 'package:flutter/material.dart';/// ...

  2. Python 模块大全(很详细!)

    转载:.... Python的模块大全,很全,有详细介绍! 另外附Python两个教程 1. Python详细教程(廖雪峰的官方网站,语言简洁!) 2. Python 进阶教程 (Vamei) 3. ...

  3. flutter开发中常用的dart插件

    flutter插件官网地址:https://pub.dartlang.org/packages/ 1. image_picker 一个可以从图库选择图片,并可以用相机拍摄新照片的flutter插件 2 ...

  4. 用Flutter + Dart快速构建一款绝美移动App

    作者 | Wojciech Kuroczycki 译者 | 弯月 来源 | CSDN(ID:CSDNnews) 如今,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不暇接的新 ...

  5. Flutter学习之Dart语法特性

    一.前言 第一天把Flutter环境搭建了,并简单实现第运行第一个Flutter项目,感觉很不错,一些基本操作和原生体验差不多.用Flutter框架写过App项目的开发者都知道,Flutter是一个使 ...

  6. 谷歌宣布推出Dart编程新语言

    北京时间9月9日上午消息,据著名科技做网站ExtremeTech的报道,谷歌编程新语言Dart逐渐浮出水面,它是一种"结构化的Web编程"语言.早在几天前谷歌就已着手注册了一系列与 ...

  7. dart 语言是jvm_Dart编译技术在服务端的探索和应用

    前言 最近闲鱼技术团队在Flutter+Dart的多端一体化的基础上,实现了FaaS研发模式.Dart吸取了其它高级语言设计的精华,例如Smalltalk的Image技术.JVM的HotSpot和Da ...

  8. Dart 调用C语言混合编程

    Dart 调用C语言 本篇博客研究Dart语言如何调用C语言代码混合编程,最后我们实现一个简单示例,在C语言中编写简单加解密函数,使用dart调用并传入字符串,返回加密结果,调用解密函数,恢复字符串内 ...

  9. flutter可视化_Flutter 对Dart情有独钟的那些事儿

    早期Flutter 开发团队评估很了好多种语言,最后选择了Dart(小道消息:说Flutter部门和Dart部门挨着,说有问题可以直接沟通)有可能是一部分啊!但是大部分是因为Dart更符合他们构建用户 ...

  10. Dart微基准测试第一部分

    在过去的几个月里,我开始收到越来越多关于某些特定 Dart 操作性能的问题.以下是Romain Rastel在他关于提高 Flutter中 ChangeNotifier 性能的工作的背景下提出的此类问 ...

最新文章

  1. 讨论Markov Random Field和Gibbs Random Field心得
  2. nodejs中httpserver的安装和使用
  3. JS模块化写法(转)
  4. c++直角坐标系与极坐标系的转换_一篇阅读量高达2百6十多万的关于坐标系和投影的相关知识探讨...
  5. jvm的client与server工作模式
  6. Sql中partition by的使用
  7. java web w3c_1.3 搭建Java Web开发环境
  8. R-CNN家族梳理:从R-CNN到Mask R-CNN
  9. 关于assert和de-assert的解释
  10. 流浪猫的故事看质量人员需求
  11. HFS远程命令执行漏洞入侵抓鸡黑阔服务器
  12. 网络编程 write 阻塞和非阻塞下的区别
  13. id: cannot find name for group ID 528
  14. android MediaPlayer SurfaceView 网络视频播放器
  15. App平台频频露脸综艺节目 观众到底买账吗?
  16. 快速上手Flask(一) 认识框架Flask、项目结构、开发环境
  17. 学生信息管理系统V2.0
  18. python设定字符串长度_python 修改字符串长度_Python 字符串操作
  19. 生物计算机未来,未来计算机可能朝着量子计算机、光子计算机和生物计算机等方向发展。(  )...
  20. win7计算机桌面快捷键显示,Win7的显示桌面在哪 Win7显示桌面快捷键是什么

热门文章

  1. 最详细的YOLOv3论文笔记
  2. linux桌面2k分辨率,解决ubuntu下外接2k显示器却没法调2k分辨率问题
  3. 2021年下半年网络规划设计师下午真题及答案解析
  4. Android开发入门二之AndroidManfest.xml文件详细说明 .
  5. 查看h3c服务器raid信息,h3c 服务器 raid配置
  6. python中有数组吗_python里面有数组吗
  7. BAL数据集与BA优化
  8. AngularJS-demo - 常用命令、内置服务、自定义服务、继承
  9. windows下开启 PHP扩展Redis
  10. GCC 使用-C语言编译过程