Flutter自动生成许可证插件license_generator的使用

发布于 1周前 作者 caililin 来自 Flutter

Flutter自动生成许可证插件license_generator的使用

license_generator 是一个Dart包,用于下载所有使用的包的许可证。它可以帮助开发者确保其项目符合所依赖库的许可要求,并自动化生成包含这些信息的文件。

Setup

Add dependency to pubspec

在项目的 pubspec.yaml 文件中添加 license_generator 作为开发依赖项:

dev-dependencies:
  license_generator: ^<latest-version>

请将 <latest-version> 替换为从 Pub 获取的最新版本号。

Basic Options

您可以配置一些基本选项来调整插件的行为:

license_generator:
  fail_fast: true # 如果设置为true,当遇到错误时会立即停止执行,默认是false。

All Options

对于更复杂的用例,您还可以通过以下方式指定更多选项:

license_generator:
  fail_fast: false
  check_before_generate: true # 在生成之前检查 pubspec.yaml 和 pubspec.lock 是否同步,默认是false。
  output_path: "lib/util/license.dart" # 指定输出路径,默认是 lib/util/license.dart。
  download_pub_dev_details: true # 下载 pub.dev 的详细信息(如主页/仓库),默认是false。
  pub_dev_base_url: "https://pub.dev" # 自定义 pub.dev 基础 URL,默认是 https://pub.dev。
  licenses:
    license_generator: "https://raw.githubusercontent.com/icapps/flutter-icapps-license/master/LICENSE"
  extra_licenses:
    some_package:
      name: "Some Package"
      version: "1.0.0"
      homepage: "http://example.com"
      repository: "https://github.com/example/some_package"
      license: "https://raw.githubusercontent.com/example/some_package/main/LICENSE"
      dev_dependency: false
      part_of_flutter_sdk: false

Running the Package

根据您的环境选择合适的方式运行该包:

  • With Flutter:

    flutter packages pub run license_generator
    
  • With Dart:

    dart pub run license_generator
    

Checking Versions

要检查 pubspec.yaml 中的所有版本是否与 pubspec.lock 匹配,请执行:

flutter packages pub run license_generator check

Generating the License File

要生成许可证文件,请执行:

flutter packages pub run license_generator generate

如果您遇到了问题,可以通过增加日志级别来获取更多信息:

  • info: 默认级别,无需显式指定。
  • debug: 显示调试信息以及堆栈跟踪和错误信息。
  • verbose: 显示所有信息,包括文件下载状态等。

例如,以 debug 模式生成许可证文件:

flutter packages pub run license_generator generate debug

Working on Mac?

如果您在 macOS 上工作,可以将以下内容添加到 .bash_profile 或者 .zshrc 文件中以便简化命令:

flutterlicensecheck(){
 flutter packages get && flutter packages pub run license_generator check
}

flutterlicense(){
 flutter packages get && flutter packages pub run license_generator generate
}

然后你可以使用简化的命令:

flutterlicense
flutterlicensecheck

示例代码

下面是一个简单的示例应用程序,展示了如何在Flutter项目中使用 license_generator 生成的许可证文件。

import 'package:flutter/material.dart';
import 'package:license_generator_example/app.dart'; // 导入包含许可证逻辑的应用程序入口点

Future<void> main() async {
  runApp(const MyApp());
}

请注意,在实际应用中,您需要确保 license_generator 已正确配置并且已成功生成了许可证文件。此外,上述导入路径可能需要根据您的项目结构进行适当调整。


更多关于Flutter自动生成许可证插件license_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动生成许可证插件license_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用license_generator插件来自动生成许可证文件的代码案例。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加license_generator依赖:

dependencies:
  flutter:
    sdk: flutter
  # 其他依赖项...

dev_dependencies:
  license_generator: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 配置许可证信息

在项目的根目录下创建一个名为licenses.yaml的文件,并在其中列出你希望包含在许可证文件中的第三方库及其许可证信息。例如:

# licenses.yaml
packages:
  cupertino_icons:
    license-file: https://raw.githubusercontent.com/flutter/cupertino_icons/master/LICENSE
  provider:
    license-file: https://raw.githubusercontent.com/rrousselGit/provider/master/LICENSE

3. 生成许可证文件

你可以在pubspec.yaml中添加一个脚本命令来运行license_generator,或者在命令行中手动运行。以下是添加脚本命令的方法:

pubspec.yaml中添加一个脚本:

scripts:
  generate_licenses: flutter pub run license_generator

然后在命令行中运行以下命令来生成许可证文件:

flutter pub run license_generator

或者,如果你添加了脚本命令,可以运行:

flutter pub run script:generate_licenses

4. 查看生成的许可证文件

运行上述命令后,license_generator将在项目的根目录下生成一个名为LICENSE的文件,其中包含所有在licenses.yaml中指定的第三方库的许可证信息。

5. 在应用中显示许可证(可选)

如果你想在Flutter应用中显示生成的许可证文件,可以将其内容读取并显示在一个文本组件中。例如:

import 'package:flutter/material.dart';
import 'dart:convert' show utf8;
import 'dart:io';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: LicensePage(),
    );
  }
}

class LicensePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Licenses'),
      ),
      body: FutureBuilder<String>(
        future: _loadLicenseFile(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            if (snapshot.hasError) {
              return Center(
                child: Text('Failed to load licenses: ${snapshot.error}'),
              );
            } else {
              return Padding(
                padding: const EdgeInsets.all(16.0),
                child: SingleChildScrollView(
                  child: Text(snapshot.data ?? '', style: TextStyle(fontSize: 14)),
                ),
              );
            }
          } else {
            return Center(child: CircularProgressIndicator());
          }
        },
      ),
    );
  }

  Future<String> _loadLicenseFile() async {
    final file = File('LICENSE');
    try {
      final contents = await file.readAsBytes();
      return utf8.decode(contents);
    } catch (e) {
      throw e;
    }
  }
}

上述代码创建了一个简单的Flutter应用,它加载并显示生成的LICENSE文件内容。

通过这些步骤,你就可以在Flutter项目中使用license_generator插件来自动生成和管理许可证文件了。

回到顶部