Dart具有一组内置库,这些库对于存储常用的示例程很有用,Dart库由一组类,常量,函数,typedef,属性和异常组成。
导入使库中的组件可供调用者代码使用, import关键字用于实现相同目的。dart文件可以具有多个import语句。
内置Dart库URI使用dart:方案来引用库。其他库可以使用文件系统路径或package:方案来指定其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 之外的所有名称
下面是一些常用的库-
Sr.No | Library & 描述 |
---|---|
1 | dart:io 服务器应用程序的文件,Socket,HTTP和其他I/O支持,默认情况下,该库是导入的。 |
2 | dart:core 每个Dart程序的内置类型,集合和其他核心函数,该库将自动导入。 |
3 | dart:math 数学常数和函数,以及一个随机数生成器。 |
4 | dart:convert 编码器和解码器,用于在不同的数据表示形式(包括JSON和UTF-8)之间进行转换。 |
5 | dart:typed_data 有效处理固定大小的数据(如,无符号的8字节整数)的列表。 |
以下示例导入内置库dart: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"); }
接下来,导入库
链接:https://www.learnfk.comhttps://www.learnfk.com/dart-programming/dart-programming-libraries.html
来源:LearnFk无涯教程网
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 //这里是内容
第2步 - 关联库
您可以通过两种方式关联库-
import 'library_name'
import 'dir/library_name'
首先,让我们定义一个自定义库 calculator.dart 。
library calculator_lib; import 'dart:math'; //libaray 语句之后的 import 语句 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
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)