48 lines
1.3 KiB
Dart
48 lines
1.3 KiB
Dart
import 'dart:io';
|
|
import 'package:image/image.dart' as img;
|
|
|
|
/// Jalankan dengan: dart run tool/generate_notification_icon.dart
|
|
void main() async {
|
|
final inputPath = 'assets/images/logo_white.png';
|
|
final outputBase = 'android/app/src/main/res';
|
|
|
|
final sizes = {
|
|
'drawable-mdpi': 24,
|
|
'drawable-hdpi': 36,
|
|
'drawable-xhdpi': 48,
|
|
'drawable-xxhdpi': 72,
|
|
'drawable-xxxhdpi': 96,
|
|
};
|
|
|
|
final inputFile = File(inputPath);
|
|
if (!inputFile.existsSync()) {
|
|
print('ERROR: File tidak ditemukan: $inputPath');
|
|
exit(1);
|
|
}
|
|
|
|
final originalBytes = inputFile.readAsBytesSync();
|
|
final original = img.decodeImage(originalBytes);
|
|
if (original == null) {
|
|
print('ERROR: Gagal decode image');
|
|
exit(1);
|
|
}
|
|
|
|
print('Source: $inputPath (${original.width}x${original.height})');
|
|
|
|
for (final entry in sizes.entries) {
|
|
final folder = '$outputBase/${entry.key}';
|
|
final outputPath = '$folder/ic_notification.png';
|
|
|
|
Directory(folder).createSync(recursive: true);
|
|
|
|
final size = entry.value;
|
|
final resized = img.copyResize(original, width: size, height: size);
|
|
final pngBytes = img.encodePng(resized);
|
|
|
|
File(outputPath).writeAsBytesSync(pngBytes);
|
|
print('Generated: $outputPath (${size}x${size})');
|
|
}
|
|
|
|
print('\nDone! Gunakan icon: "ic_notification" di fcm_service.dart');
|
|
}
|