Flutter开源许可展示插件licenses_dart的使用

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

Flutter 开源许可展示插件 licenses_dart 的使用

licenses_dart 是一个用于加载和解析所有可用 SPDX 许可证的 Dart 包。该包实现了任何 SPDX 许可证 中的信息和内容,并且可以在离线状态下运行,可以集成到任何系统中。

使用

使用此包非常简单。只需创建一个新的 License 对象,并传入许可证标识符即可。然后可以读取对象的所有属性。所有可用的许可证列表可以在官方索引中找到:https://spdx.org/licenses

var license = License("APACHE-2.0");
print("Name: ${license.name}");
// > Name: Apache License 2.0

如果许可证在索引中找不到,则构造函数会抛出一个 UnknownLicenseException 异常。这可以用来验证许可证。如果你认为某个许可证缺失,请参阅 索引更新

var licenseId = "Funky-1.2"; // 这个许可证不存在
try {
    License(licenseId);
    print("$licenseId: valid");
} on UnknownLicenseException {
    print("$licenseId: unknown");
}
// > License Funky-1.2 unknown

索引更新

最后更新时间:2024-12-30 18:38 UTC

该包不会在运行时自动获取许可证。每当发布新的许可证时,也需要发布此包的新版本。不用担心,这不是一个复杂的过程,甚至不到一分钟就可以重新生成所有文件。

我会自己尝试更新该包(你只需要将最新版本添加到 pubspec 文件中),但如果我错过了任何版本,请打开 一个新功能请求 来让我知道。谢谢。

完整示例代码

以下是一个完整的示例代码,展示了如何使用 licenses_dart 插件:

import 'package:licenses_dart/licenses_dart.dart';

void main() {
  // 创建一个 Apache-2.0 许可证对象
  var license1 = License("APACHE-2.0");

  // 打印许可证信息
  print("Name:\t\t\t${license1.name}");
  print("License ID:\t\t${license1.licenseId}");
  print("Is OSI approved:\t${license1.isOsiApproved}");
  print("Is deprecated:\t\t${license1.isDeprecatedLicenseId}");
  print("See also:\t\t${license1.seeAlso}");

  // 打印分隔线
  print("-" * 80);

  // 尝试创建一个不存在的许可证
  var license2Id = "Funky-1.2"; // 这个许可证不存在
  try {
    License(license2Id);
    print("$license2Id: valid");
  } on UnknownLicenseException {
    print("$license2Id: unknown");
  }
}

更多关于Flutter开源许可展示插件licenses_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter开源许可展示插件licenses_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用licenses_dart插件来展示开源许可信息的示例代码。licenses_dart插件允许你以更灵活的方式展示Flutter及其依赖的开源许可。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加licenses_dart依赖:

dependencies:
  flutter:
    sdk: flutter
  licenses_dart: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来获取依赖。

2. 创建一个展示许可信息的页面

接下来,你可以创建一个新的Dart文件,例如licenses_page.dart,来定义展示许可信息的页面。

import 'package:flutter/material.dart';
import 'package:licenses_dart/licenses_dart.dart';

class LicensesPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('开源许可'),
      ),
      body: FutureBuilder<Licenses>(
        future: Licenses.load(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          } else if (snapshot.hasError) {
            return Center(child: Text('加载许可信息失败: ${snapshot.error}'));
          } else {
            final licenses = snapshot.data!;
            return Padding(
              padding: const EdgeInsets.all(16.0),
              child: ListView.builder(
                itemCount: licenses.packages.length,
                itemBuilder: (context, index) {
                  final package = licenses.packages[index];
                  return Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        package.name,
                        style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
                      ),
                      SizedBox(height: 8),
                      Text(package.license),
                      SizedBox(height: 16),
                      Divider(),
                    ],
                  );
                },
              ),
            );
          }
        },
      ),
    );
  }
}

3. 在应用中导航到许可页面

现在,你可以在应用的导航中添加一个按钮或菜单项来导航到许可页面。例如,在main.dart中:

import 'package:flutter/material.dart';
import 'licenses_page.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '点击按钮查看开源许可',
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => LicensesPage()),
                );
              },
              child: Text('查看开源许可'),
            ),
          ],
        ),
      ),
    );
  }
}

总结

以上代码展示了如何在Flutter项目中集成licenses_dart插件,并创建一个页面来展示应用的开源许可信息。通过FutureBuilderLicenses.load()方法,你可以异步加载并展示许可信息。这种方式比Flutter自带的showLicensePage方法提供了更多的自定义空间。

回到顶部