热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flutter基础(一)库的使用

以下内容为自学笔记,若有幸被大神看到,望指正其不准,补充其不足。万分感谢!!!一、Flutter中库的简介在Dart语言中:所有的后缀名为.dart文件都是库包。在Flutter工

以下内容为自学笔记,若有幸被大神看到,望指正其不准,补充其不足。万分感谢!!!

一、Flutter中库的简介
  • 在Dart语言中:所有的后缀名为.dart文件都是库包。

  • 在Flutter工程中,lib包为根目录,package:项目名/此目录指定的就是lib包。

二、库的使用

Flutter中使用库,可以使用以下几种方式

  1. import导入;
  2. export重新导出库;
  3. library声明库;
  4. partpart of关联文件与库;
  5. 依赖第三方库。

1、import的使用

  1. 格式:import 库文件的路径.

    import 'package:工程名字/lib下的相对路径';
    import 'lib下的相对路径';

  2. 当导入库在lib包目录下的lib1.dart时:

    1. 可以直接写库名:此时默认指向lib包内。

      import 'lib1.dart';

    2. 也可以写全路径:

      import 'package:lib_demo/lib1.dart';

  3. 当导入库在lib目录下自定义包src目录下的lib1.dart时:要定位到自定义包的位置

    1. 可以直接写库名:此时定位到lib包下自定义的src目录内。

      import '/src/lib1.dart';

    2. 也可以写全路径:

      import 'package:lib_demo/src/lib1.dart';

2、as 指定库前缀

  1. 概述:

    • 当导入的不同库引发的冲突时,使用as指定库前缀用来解决;
    • 当不同库内有相同的类,方法,成员变量,当其被使用时就会发生冲突。
  2. 注意事项:

    1. as指定的库前缀,相当于C中的命名空间,使用时用前缀.要是有的对象。
    2. 未指定的前缀的库内有成员(方法,变量,类)和本地文件相同时,此时本地的会覆盖导入的库内的成员,在本地调用时之后执行本地的成员。
  3. 使用方法:

    //在导入路径后 + as +自定义前缀名称
    import 'lib下的相对路径' as 自定义名称;
    //使用时,以前缀名称开始.调用,相当于c中的命名空间

lib1.dart

String libName = "lib1";
void getLib(){
print("我是$libName");
}
class Person{
String name ;
int age ; void run(){
print('$name is Running !');
}
}

lib2.dart

String libName = "lib2";
void getLib(){
print("我是$libName");
}
class Person{
String name ;
int age ; void run(){
print('$name is Running !');
}
}

此时lib1lib2内的成员名都相同,都导入使用时,会报The name 'Person' is defined in the libraries 'lib1.dart' and 'lib2.dart'这个错误,此时导入要给一个库加一个前缀as,以lib1为例:

main.dart

import 'lib1.dart' as lib1;//给lib1加个前缀就叫lib1
import 'lib2.dart';
void getLib() {
print("我是本地成员");
}
main() {
lib1.getLib();
//本地方法覆盖掉lib2中的方法
getLib(); print('===================');
//lib1就相当于命名空间,使用时用lib1.要使用的对象
lib1.Person p1 = new lib1.Person();
//这里可以看出如果这里libName就是lib2中的成员
p1.name =libName;
p1.run(); print('====================');
Person p2 = new Person();
p2.name = lib1.libName;
p2.run();
}
//打印结果
我是lib1
我是本地成员
==================
lib2 is Running !
==================
lib1 is Running !

3、show和hide操作库的部分

  1. 概述:

    • show 名称只导入库的这边代码,其余的隐藏(不导入);
    • hide 名称隐藏(不导入)这部分代码,其余的可见(已导入);
    • 当想操作多个成员时,可用,分隔
  2. 使用方法:

    import 'lib下的相对路径' as 自定义名称 show 名称1,名称2,名称3;
    //或
    import 'lib下的相对路径' hide 名称1,名称2,名称3;

main.dart

import 'lib1.dart' as lib1 show Person;//只导入Person类
import 'lib2.dart' hide getLib;//只隐藏getLib()方法
main() {
//lib1.getLib(); //lib1中的getLib()方法被隐藏
lib1.Person p1 = new lib1.Person(); //lib1中Person类被导入
p1.name = libName; //lib2中libName成员未被隐藏 被导入了
p1.run();
print('==================');
//getLib(); //lib2中getLib()被隐藏
Person p2 = new Person(); //lib2中Person未被隐藏 被导入
//p2.name = lib1.libName; //lib1中libName 成员变量被隐藏
p2.name = '张三';
p2.run();
}

4、export重新导入库

  1. 概述:

    1. 当需要导入的库过多或者要从新整合库使用时,可以通过重新导入库者,把部分库或全部的库来组合或者重新打包库;
    2. export中也有showhide操作,但没有as库前缀;
    3. 使用export重新导入多个库时,各个库中有相同名称的成员(类,方法,变量)会发生冲突。
    4. export重新导入的库相当于将库内代码复制到当前文件中,但在当前文件并不能使用。因为Dart语言不存在重载,所以会出现冲突。
    5. 部分冲突可以使用hide将冲突的部分隐藏来解决。
  2. 使用方法:

    lib3.dart

    String lib3Name = "lib3";
    void getLib3(){
    print("我是$lib3Name");
    }
    class Person3{
    String name ;
    int age ;
    }

    lib4.dart

    String lib4Name = "lib4";
    void getLib4(){
    print("我是$lib4Name");
    }
    class Person4{
    String name ;
    int age ;
    }

    libs.dart

    //将要使用的库放在同一个文件下,方便其他文件调用
    //export导入的库的内容,当前文件并不能使用
    export 'lib3.dart';
    export 'lib4.dart' show lib4Name,getLib4;
    //lib3和lib4内的成员变量,方法和类的名称不允许相同,否则将会冲突,这也是不能使用as的原因

    main.dart

    import 'libs.dart'

5、library 声明库

  • 使用library关键字直接给当前文件标记成库,

  • 格式:一般在文件头部library 自定义名称

  • 声明的库中内容可由下方式导入:

    • 可使用export导入的,相当于复制进来,但当前库内引用不到,不过import引用当前库时可以使用。
    • 也可使用partpart of来关联文件与库。part的优先级要高于import。当前库可以直接应用part中的内容。

    libs.dart

    library name;
    export 'lib3.dart';
    export 'lib4.dart' show lib4Name,getLib4;
    //与lib5.dart文件内的part of配合使用,此时lib5内的代码在本地也可以使用
    part 'lib5.dart';

    lib5.dart

    part of name;//与name库中part配合使用String lib5Name = "lib5";
    void getLib5(){
    print("我是$lib5Name");
    }
    class Person5{
    String name ;
    int age ;
    }

三、依赖第三方库
  1. 依赖方式:

    在项目中pubspec.yaml文件内的dependencies:标签下添加依赖;

    dependencies:
    flutter:
    sdk: flutter
    # The following adds the Cupertino Icons font to your application.
    # Use with the CupertinoIcons class for iOS style icons.
    cupertino_icons: ^0.1.2
    english_words: any
    #any自动导入与环境兼容的库包,版本号前要有空格,推荐使用any

    • 当添加完依赖后使用flutter packages get命令去下载包,或者工具上边pacages get按钮;
    • 然后去pubspec.lock文件中查看导入依赖的兼容版本。
  2. ^version相当于>= version

  3. 依赖方式还分为以下三种:

    1. 常规依赖:dependencies:此标签下依赖在调试和发版后都会生效
    2. Dev依赖:dev_dependencies:此标签下的依赖均在调试时生效。
    3. 重写依赖:dependency_overrides:强制下载依赖包,不管是否兼容,不推荐使用。

推荐阅读
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Flutter入门——Flutter功能概览
    IT之家12月5日消息:今天谷歌官方宣布Flutter的1.0版本正式发布!Flutter是Google打造的UI工具包,帮助你通过一套代码同时在iOS和Android上构建媲美原 ... [详细]
  • 使用platformchannels,Flutter可以与本机平台互操作(即读取电池电量).在Android上,这需要调用Java方法.我想使用第三方JavaSDK(适用于AW ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ... [详细]
  • flutter图片缓存Flutter的图片缓存机制有问题(可能是我使用的版本1.12.13有问题)网络图片会默认缓存到本地,但是不管图片是不是完整的或者损坏的,导致页面在下次进入的 ... [详细]
  • flutter插件搜索及最新依赖包查找
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了flutter插件搜索及最新依赖包查找相关的知识,希望对你有一定的参考价值。一.flutter中包和插件搜索平台 ... [详细]
  • 【GO】k8s 管理系统项目的前端部分16–前端布局详解
    【GO】k8s管理系统项目[前端部分–前端布局]1.前端布局2.Layout2.1layoutsrclayoutLayout.vue ... [详细]
author-avatar
长风剑客2502852893
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有