Dart编程库 Dart编程Typedef Dart编程异步 编程语言中的库表示例程集合(编程指令集)。Dart有一组内置库,可用于存储经常使用的例程。Dart库由一组类,常量,函数,typedef,属性和异常组成。 导入库 导入使库中的组件可用于调用代码。import关键字用于实现相同的目标。dart文件可以有多个import语句。 内置Dart库URI使用dart:scheme来引用库。其他库可以使用文件系统路径或package:scheme来指定其URI。包管理器(如pub工具)提供的库使用 package:scheme 。 下面给出了在Dart中导入库的语法 import 'URI' 请考虑以下代码段 import 'dart:io' import 'package:lib1/libfile.dart' 如果只想使用库的一部分,则可以有选择地导入库。下面给出了相同的语法 import 'package: lib1/lib1.dart' show foo, bar; // 只导入foo 和 bar. import 'package: mylib/mylib.dart' hide foo; // 导入除了foo的所有 下面给出了一些常用的库 序号 库与描述 1 dart:io 服务器应用程序的文件,套接字,HTTP和其他I / O支持。此库在基于浏览器的应用程序中不起作用。默认情况下导入此库。 2 dart:core 每个Dart程序的内置类型,集合和其他核心功能。该库是自动导入的。 3 dart:math 数学常数和函数,加上随机数生成器。 4 dart::convert 用于在不同数据表示之间进行转换的编码器和解码器,包括JSON和UTF-8。 5 dart:typed_data 有效处理固定大小数据的列表(例如,无符号8字节整数)。 示例:导入和使用库 以下示例导入内置库 dart:math 。该片段从 math 库中调用 sqrt() 函数。此函数返回传递给它的数字的平方根。 import 'dart:math'; void main() { print("Square root of 36 is: ${sqrt(36)}"); } 输出 Square root of 36 is: 6.0 封装在库中 Dart脚本可以使用下划线(_)为标识符添加前缀,以将其组件标记为 私有。简而言之,Dart库可以通过外部脚本限制对其内容的访问。这被称为 封装 。下面给出了相同的语法 语法 _identifier 例如 首先,使用私有函数定义库。 library loggerlib; void _log(msg) { print("Log method called in loggerlib msg:$msg"); } 接下来,导入库 import 'test.dart' as web; void main() { web._log("hello from webloggerlib"); } 上面的代码将导致错误。 Unhandled exception: No top-level method 'web._log' declared. NoSuchMethodError: method not found: 'web._log' Receiver: top-level Arguments: [...] #0 NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:184) #1 main (file:///C:/Users/Administrator/WebstormProjects/untitled/Assertion.dart:6:3) #2 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:261) #3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148) 创建自定义库 Dart还允许您将自己的代码用作库。创建自定义库涉及以下步骤 第1步:声明库 要显式声明库,请使用 library 语句 。声明库的语法如下 library library_name // library contents go here 第2步:关联库 您可以通过两种方式关联库 在同一目录中 import 'library_name' 来自不同的目录 import 'dir/library_name' 示例:自定义库 首先,让我们定义一个自定义库, 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 ") ; return firstNumber%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"); } 该程序应产生以下 输出 inside add method of Calculator Library inside modulus method of Calculator Library 10 + 20 = 30 10 % 20= 10 random no 0 库前缀 如果导入两个具有冲突标识符的库,则可以为一个或两个库指定前缀。使用 'as' 关键字指定前缀。下面给出了相同的语法 语法 import 'library_uri' as prefix 例如 首先,让我们定义一个库: loggerlib.dart 。 library loggerlib; void log(msg){ print("Log method called in loggerlib msg:$msg"); } 接下来,我们将定义另一个库: webloggerlib.dart 。 library webloggerlib; void log(msg){ print("Log method called in webloggerlib msg:$msg"); } 最后,我们将导入带有前缀的库。 import 'loggerlib.dart'; import 'webloggerlib.dart' as web; // prefix avoids function name clashes void main(){ log("hello from loggerlib"); web.log("hello from webloggerlib"); } 它将产生以下输出 Log method called in loggerlib msg:hello from loggerlib Log method called in webloggerlib msg:hello from webloggerlib Dart编程Typedef Dart编程异步