一统天下 flutter - dart: 库的开发和使用

源码 https://github.com/webabcd/flutter_demo
作者 webabcd

一统天下 flutter - dart: 库的开发和使用

示例如下:

lib\dart\package\demo.dart

/*
 * dart 库的开发和使用(import, export)
 *
 * import 用于从其他 .dart 文件中导入(_ 开头的是私有的不会被导入,非 _ 开头的会被导入)
 * export 用于在一个 .dart 文件中定义需要导出的其他多个 .dart 文件,这样你只用 import 这一个 .dart 文件即可导入此文件中定义的多个 .dart 文件
 * part, part of, library 用于将多个文件合并为一个文件
 *
 * 注:目录名、文件名以及导入时定义的前缀建议用 snake_case 规范命名(避免不同文件系统是否区分大小写的问题),比如 import 'aaa_bbb_ccc.dart' as xxx_yyy_zzz;
 */

import 'package:flutter/material.dart';
import 'package:flutter_demo/helper.dart';

import 'lib1.dart';                       // lib1.dart 中定义的非 _ 开头的类或函数等都会被导入
import 'lib2.dart' as lib2;               // 通过前缀 lib2. 调用 lib2.dart 中的的非 _ 开头的类或函数等
import 'lib3.dart' show lib3_f1, lib3_f2; // 只导入 lib3.dart 的 lib3_f1, lib3_f2 其他都不导入
import 'lib4.dart' hide lib4_f1, lib4_f2; // lib4.dart 中定义的非 _ 开头的类或函数等都会被导入,但是不包括 lib4_f1, lib4_f2
import 'mylib.dart';                      // 导入 mylib.dart 中的 export 内容
import 'mylib2.dart';                     // 导入 mylib2.dart(通过 part, part of 定义)
import 'mylib3.dart';                     // 导入 mylib3.dart(通过 part, part of, library 定义)


// 引用 dart 语言的内置库的方式
// import 'dart:math';
// 引用 pub 包提供的库的方式
// import 'package:flutter/material.dart';
// import 'package:path_provider/path_provider.dart';
// 引用本地文件的方式
// import './lib1.dart';


class DartPackage extends StatelessWidget {
  const DartPackage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {

    sample1();

    return const MyWidget(text: "dart_package_demo");
  }

  void sample1() {
    lib1_f1();
    // _lib1_f2();    // _ 开头的无法导入

    lib2.lib2_f1();   // 因为通过 as lib2 导入,所以需要通过前缀 lib2. 访问

    lib3_f1();
    lib3_f2();
    // lib3_f3();     // 不在 import 的 show 里,所以无法访问

    // lib4_f1();     // 在 import 的 hide 里,所以无法访问
    // lib4_f2();     // 在 import 的 hide 里,所以无法访问
    lib4_f3();

    lib5_f1();
    lib5_f2();
    lib5_f3();
    lib6_f1();
    // lib6_f2();     // 不在 export 的 show 里,所以无法访问
    // lib6_f3();     // 不在 export 的 show 里,所以无法访问
    // lib7_f1();     // 在 export 的 hide 里,所以无法访问
    lib7_f2();
    lib7_f3();
    mylib_f1();

    lib8_f1();
    lib9_f1();
    mylib2_f1();

    lib10_f1();
    lib11_f1();
    mylib3_f1();
  }
}

lib\dart\package\lib1.dart

import 'package:flutter_demo/helper.dart';

void lib1_f1() {
  log("lib1_f1");
}

void _lib1_f2() {
  log("lib1_f2");
}

lib\dart\package\lib2.dart

import 'package:flutter_demo/helper.dart';

void lib2_f1() {
  log("lib2_f1");
}

lib\dart\package\lib3.dart

import 'package:flutter_demo/helper.dart';

void lib3_f1() {
  log("lib3_f1");
}

void lib3_f2() {
  log("lib3_f2");
}

void lib3_f3() {
  log("lib3_f3");
}

lib\dart\package\lib4.dart

import 'package:flutter_demo/helper.dart';

void lib4_f1() {
  log("lib4_f1");
}

void lib4_f2() {
  log("lib4_f2");
}

void lib4_f3() {
  log("lib4_f3");
}

lib\dart\package\lib5.dart

import 'package:flutter_demo/helper.dart';

void lib5_f1() {
  log("lib5_f1");
}

void lib5_f2() {
  log("lib5_f2");
}

void lib5_f3() {
  log("lib5_f3");
}

lib\dart\package\lib6.dart

import 'package:flutter_demo/helper.dart';

void lib6_f1() {
  log("lib6_f1");
}

void lib6_f2() {
  log("lib6_f2");
}

void lib6_f3() {
  log("lib6_f3");
}

lib\dart\package\lib7.dart

import 'package:flutter_demo/helper.dart';

void lib7_f1() {
  log("lib7_f1");
}

void lib7_f2() {
  log("lib7_f2");
}

void lib7_f3() {
  log("lib7_f3");
}

lib\dart\package\lib8.dart

// lib8.dart 是 mylib2.dart 文件的一部分
part of 'mylib2.dart';

void lib8_f1() {
  log("lib8_f1");
}

lib\dart\package\lib9.dart

// lib9.dart 是 mylib2.dart 文件的一部分
part of 'mylib2.dart';

void lib9_f1() {
  log("lib9_f1");
}

lib\dart\package\lib10.dart

// lib10.dart 是 library mylib3 的一部分
part of mylib3;

void lib10_f1() {
  log("lib10_f1");
}

lib\dart\package\lib11.dart

// lib11.dart 是 library mylib3 的一部分
part of mylib3;

void lib11_f1() {
  log("lib11_f1");
}

lib\dart\package\mylib.dart

import 'package:flutter_demo/helper.dart';

// mylib.dart 被其他文件 import 后,这里的 export 的文件也会被自动 import
export 'lib5.dart';
export 'lib6.dart' show lib6_f1;  // export 支持 show(用法和 import 的一样)
export 'lib7.dart' hide lib7_f1;  // export 支持 hide(用法和 import 的一样)

void mylib_f1() {
  log("mylib_f1");
}

lib\dart\package\mylib2.dart

import 'package:flutter_demo/helper.dart';

// mylib2.dart 是主文件,这个文件会自动将 lib8.dart, lib9.dart 合并进来
part 'lib8.dart';   // lib8.dart 需要在文件的顶部使用 part of
part 'lib9.dart';   // lib9.dart 需要在文件的顶部使用 part of

void mylib2_f1() {
  log("mylib2_f1");
}

lib\dart\package\mylib3.dart

// 当前的库名为 mylib3(要与当前文件的文件名 mylib3.dart 一致)
// 这样,需要被合并进来的文件在文件的顶部声明 part of mylib3; 即可
library mylib3;

import 'package:flutter_demo/helper.dart';

// mylib3.dart 是主文件,这个文件会自动将 lib10.dart, lib11.dart 合并进来
part 'lib10.dart';    // lib10.dart 需要在文件的顶部使用 part of
part 'lib11.dart';    // lib11.dart 需要在文件的顶部使用 part of

void mylib3_f1() {
  log("mylib3_f1");
}

源码 https://github.com/webabcd/flutter_demo
作者 webabcd

posted @ 2023-03-22 10:03  webabcd  阅读(100)  评论(0编辑  收藏  举报