登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
资源区
›
代码
›
Flutter/Dart第07天:Dart基础语法详解(库、导入和关键 ...
Flutter/Dart第07天:Dart基础语法详解(库、导入和关键字)
[ 复制链接 ]
俏挺喳
2025-6-5 14:43:25
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
Dart官网文档:https://dart.dev/language/libraries
重要说明:
本博客基于Dart官网文档,但并不是简单的对官网进行翻译,在覆盖核心功能情况下,我会根据个人研发经验,加入自己的一些扩展问题和场景验证。
Dart中的库(Library)
Dart语言对代码的复用下了不少功夫,如前面讲到的Mixin高级特性实现类级别代码复用。本文介绍另一种更宽广的代码复用:
库
。
Dart库可以认为是一组复用类、功能等的集合,它则代表了一个共享的代码模块,任何一个.dart文件都是一个库。
Dart库有一个隐含的规则:凡是以下划线_开头的标识符仅在本库内部可见,其他在库内外部均可见。(Dart没有private/protected/public可见域标识符,那么对应Java语言,下划线_开头为private,其他的为public,Dart没有protected)。
Dart库可以基本可分为3种,建议在使用时严格按照这3类导入库:
Dart中的内置库,即SDK中的库(对于Java语言如java.util.Map),以dart:作为命名空间。
Dart包中心仓库的库(对于Java语言为Maven中心仓库),以package:作为命名空间。
本地文件代码库,以相对路径或者绝对路径作为命名空间。当然,本地代码块也可以使用package作为命名空间,容易和第2中混淆,因此不推荐。
如何使用库(import关键字)
通过import关键字指定在一个库中使用另外一个命名空间的库。
代码样例:
如下代码,我们导入了Dart内置的html库、中心仓库get库,和本地库。
// 内置库
import 'dart:html';
// 中心仓库
import 'package:get/get.dart';
// 本地代码库
import '../01-ntopic-hellodart.dart';
复制代码
指定库前缀(as关键字)
研发过程中,我们有时会导入有相同标识符,那么在使用过程中就会产生冲突,这时可以通过as关键字进行重命名库,同时在使用的时候,增加前缀进行区分。
代码样例:
如下代码,我们导入了
lib1
和
lib2
两个库,它们都有
Element
这个类。
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// `lib1`库中Element类
Element element1 = Element();
// `lib2`库中Element类,通过`lib2`前缀解决冲突
lib2.Element element2 = lib2.Element();
复制代码
导入部分库(show/hide关键字)
我们有时候只需要用到某个库的一部分代码或者类,或者需要排除某个库中指定的代码,通过增加show和hide关键字可实现。
代码样例:
如下代码,我们用到了
lib1
和
lib2
两个库,
lib1
通过show仅导入了
foo
这个标识符(类名、常量名等),而
lib2
通过hide导入除
foo
之外的其他所有标识符。
// 仅导入`foo`
import 'package:lib1/lib1.dart' show foo;
// 导入除`foo`之外所有
import 'package:lib2/lib2.dart' hide foo;
复制代码
延迟导入库(deferred as关键字)
Web应用中通过延迟导入库,可以实现按需加载,如下几种常见的应用场景:
减少Web应用的启动时间。
A/B测试,比如切流不同的算法库。
不常用的功能,比如可选页面、弹窗等。
代码样例:
如下代码,通过deferred as关键字,实现延迟导入库,在实际使用库功能时需要导入库(如:await hello.loadLibrary();),在库加载完成之前,会阻塞代码执行。执行loadLibrary()方法仅实际加载库一次,后续调用该方法不会重复加载。
// 1. 延迟导入库
import 'package:greetings/hello.dart' deferred as hello;
// 2. 实际使用时,使用库前缀
Future<void> greet() async {
// 加载库,加载成功之前阻塞后续代码执行,多次调用仅加载一次
await hello.loadLibrary();
hello.printGreeting();
}
复制代码
特别注意:
延迟导入库中的常量,在该库导入之前并不存在,因此它们并不是
导入库
(即使用它们的文件)中的常量。
延迟导入库在导入之前并不存在,因此
导入库
不能使用它们的类型(包括类、枚举等),可以考虑把公共代码(如基础类、接口等)抽取出来作为单独的库,让延迟导入库和导入库共同导入使用。
当使用deferred as XXX延迟导入库时,Dart隐含的给loadLibrary()增加了XXX命名空间。如上代码,loadLibrary()方法是异步的,返回一个Future。
Dart中的关键字(共67个)
Dart官方文档:https://dart.dev/language/keywords
Dart关键字一共包含67个,本博客不重复列出这67个关键字,仅对关键字进行说明:
尽量避免
使用这些关键字作为标识符,如有必要,表格中有1,2,3上标的关键字在部分常见可以使用作为标识符。
上标为1的关键字与
上下文
有关,离开了上下文,这些关键字可以作为标识符。如show和hide关键在只在导入库上下文文中用到,其他地方可以正常作为标识符。
上标为2的关键字是Dart
内置
的标识符,它们在大部分场景可以使用,但是禁止在类名、类型名和指定库的前缀(其实也是类型的一种)。
上标为3的关键字(共2个:await/yield)限制在异步编程场景使用,在标记为async/async*/sync*同步和异步函数内部,禁止使用。
我的本博客原地址:https://ntopic.cn/p/2023100201
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Dart
Flutter
07天
基础
语法
相关帖子
小白也能看懂的RLHF:基础篇
快速构建一个基础、现代化的 WinForm 管理系统!
系统架构师-基础到企业应用架构-业务逻辑层
大模型基础补全计划(八)---相关知识点回顾与Qwen3-VL-2B-Instruct实例分析(终章)
Markdown是什么?Markdown语法大全-Markdown从入门到精通
csq-蓝桥杯python-基础语法1-逻辑运算与条件语句
【基础】UnityShader Graph 的编辑器介绍
Flask路由入门指南:从基础定义到优先级与动态路由转换器
1.java基本语法
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
小白也能看懂的RLHF:基础篇
5
365
阜逐忍
2025-11-20
业界
快速构建一个基础、现代化的 WinForm 管理系统!
2
729
言晓莉
2025-11-20
业界
系统架构师-基础到企业应用架构-业务逻辑层
1
651
顶豌
2025-11-29
业界
大模型基础补全计划(八)---相关知识点回顾与Qwen3-VL-2B-Instruct实例分析(终章)
2
431
忿惺噱
2025-11-30
安全
Markdown是什么?Markdown语法大全-Markdown从入门到精通
1
324
靛尊
2025-12-05
安全
csq-蓝桥杯python-基础语法1-逻辑运算与条件语句
0
198
百谖夷
2025-12-08
安全
【基础】UnityShader Graph 的编辑器介绍
1
957
挽幽
2025-12-08
业界
Flask路由入门指南:从基础定义到优先级与动态路由转换器
0
303
扒钒
2025-12-15
安全
1.java基本语法
0
508
每捎京
2025-12-15
回复
(5)
事确
2025-10-13 00:41:55
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前排留名,哈哈哈
虹姥
2025-10-16 03:44:11
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
澹台忆然
2025-10-31 02:22:43
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
收藏一下 不知道什么时候能用到
汝雨竹
2025-11-11 18:39:47
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
锦惺
3 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
俏挺喳
3 天前
关注
0
粉丝关注
24
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
kk14977
6845357
3934307807
991123
4
xiangqian
638210
5
韶又彤
9998
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
895
【分析式AI】-带你秒弄懂决策树与随机森林
97
DBLens 的数据安全、登录方式与离线使用说
71
国内开发者合规订阅 Claude Code 的 3 条最
153
Perforce QAC 2025.3 新版上线 | 速度与深
475
防止跨站脚本攻击(XSS)(完整版HTTP安全
352
Wayland下RDP服务器的搭建
887
Flink学习笔记:状态后端
532
csq-蓝桥杯python-基础语法2-列表与循环语
512
C#+VisionMaster 学习笔记(目录)-目录
586
ROS2核心概念之参数
88
【Agent】MemOS 源码笔记---(5)---记忆分类
129
.NET周刊【11月第4期 2025-11-23】
190
Oracle回滚与撤销(Undo)技术:从理论到实
221
吴恩达深度学习课程四:计算机视觉 第二周
854
jetson nano的ssh远程登录连接
638
Categraf 监控采集器常见问题汇总
825
11月和12月求职总结
950
2026年成都品牌主,如何选择AI优化搜索(AI
368
01 相向双指针
487
制造行业项目管理工具选型经验分享(简直是