🔥

【Flutter】LicenseRegistryを使ったライセンスページ

に公開

ライセンスページ作成

下記記事参考にじぶんなりのライセンスページを作成しました。
忘れない様に記事にして残しておきます。
https://zenn.dev/motu2119/articles/custom-license


class LicensePage extends HookConsumerWidget {
  /// Constructor
  const LicensePage({super.key});

  
  Widget build(BuildContext context, WidgetRef ref) {
    ///
    final list = useState<List<LicenseEntry>>([]);

    Future<void> getLicense() async {
      final licenses = await LicenseRegistry.licenses.toList();
      licenseList.value = licenses;
    }

    useEffect(
      () {
        WidgetsBinding.instance.addPostFrameCallback((_) {
          getLicense();
        });
        return null;
      },
      [],
    );

    return Scaffold(
      appBar: const AppBar(
        title: 'ライセンス',
      ),
      body: list.value.isEmpty
          ? const Center(child: CircularProgressIndicator())
          : ListView.builder(
              itemCount: list.value.length,
              itemBuilder: (context, index) {
                final entry = list.value[index];
                final title = entry.packages.join(', ');
                final paragraphs = entry.paragraphs;

                return Padding(
                  padding: const EdgeInsets.symmetric(horizontal: 19),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      // パッケージタイトル
                      Padding(
                        padding: const EdgeInsets.symmetric(vertical: 12),
                        child: Text(
                          title,
                          style: const TextStyle(
                            fontWeight: FontWeight.bold,
                            fontSize: 16,
                          ),
                        ),
                      ),
                      //  段落
                      ...paragraphs.map(
                        (para) => Padding(
                          padding: const EdgeInsets.only(bottom: 8),
                          child: Text(
                            para.text,
                            style: const TextStyle(fontSize: 14),
                          ),
                        ),
                      ),
                    ],
                  ),
                );
              },
            ),
    );
  }
}

Discussion