플러터에서 내가 사용한 오픈소스 라이센스를 손쉽게 보여주도록 지원해주는 패키지가 있다
- pubspec.yaml에 아래 코드 추가
flutter_oss_licenses: ^3.0.4
run flutter_oss_licenses:generate -o assets/json/licenses.json --json
flutter:
uses-material-design: true
assets:
- assets/
- assets/json/licenses.json
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
import 'package:marrying_flutter/app_theme.dart';
class SettingLicenses extends StatelessWidget {
const SettingLicenses({super.key});
Future<List<Map<String, dynamic>>> loadLicenses() async {
final jsonString = await rootBundle.loadString('assets/json/licenses.json');
final List<dynamic> jsonData = json.decode(jsonString);
return jsonData.map((e) => e as Map<String, dynamic>).toList();
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('오픈소스 라이센스')),
body: FutureBuilder<List<Map<String, dynamic>>>(
future: loadLicenses(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
color: AppThemeColors().pink,
strokeWidth: 2,
));
}
final licenses = snapshot.data!;
return ListView.separated(
padding: const EdgeInsets.all(16),
itemCount: licenses.length,
separatorBuilder: (_, __) => Divider(
color: AppThemeColors().divider,
),
itemBuilder: (context, index) {
final license = licenses[index];
final name = license['name'] ?? 'Unknown';
final homepage = license['homepage'] ?? license['repository'];
return ListTile(
title: Text(
name,
style: TextStyle(fontSize: 15, fontWeight: AppThemeFontWeights().medium),
),
subtitle: homepage != null
? Text(
homepage,
style: TextStyle(color: AppThemeColors().grey73),
)
: null,
);
},
);
},
),
);
}
}