TKK_Nisa_E32221364/lib/utils/icon_generator.dart

168 lines
4.2 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:ui' as ui;
import 'dart:io';
class IconGenerator {
static Future<void> generateAppIcons() async {
// Sizes untuk berbagai platform
final sizes = [
16, 32, 48, 64, 128, 256, 512, 1024, // Berbagai ukuran
];
for (final size in sizes) {
await _generateIcon(size);
}
}
static Future<void> _generateIcon(int size) async {
// Create a recorder to record drawing commands
final recorder = ui.PictureRecorder();
final canvas = Canvas(recorder);
// Background
final backgroundPaint =
Paint()
..color = Colors.blue
..style = PaintingStyle.fill;
canvas.drawRRect(
RRect.fromLTRBR(
0,
0,
size.toDouble(),
size.toDouble(),
Radius.circular(size * 0.1),
),
backgroundPaint,
);
// API Icon shape
final iconPaint =
Paint()
..color = Colors.white
..style = PaintingStyle.fill;
final iconSize = size * 0.6;
final iconOffset = size * 0.2;
// Draw simple API icon (circles and lines)
// Center circle
canvas.drawCircle(
Offset(size * 0.5, size * 0.5),
iconSize * 0.15,
iconPaint,
);
// Side circles
canvas.drawCircle(
Offset(iconOffset + iconSize * 0.2, size * 0.5),
iconSize * 0.1,
iconPaint,
);
canvas.drawCircle(
Offset(iconOffset + iconSize * 0.8, size * 0.5),
iconSize * 0.1,
iconPaint,
);
// Connecting lines
final linePaint =
Paint()
..color = Colors.white
..strokeWidth = iconSize * 0.05
..style = PaintingStyle.stroke;
canvas.drawLine(
Offset(iconOffset + iconSize * 0.3, size * 0.5),
Offset(iconOffset + iconSize * 0.35, size * 0.5),
linePaint,
);
canvas.drawLine(
Offset(iconOffset + iconSize * 0.65, size * 0.5),
Offset(iconOffset + iconSize * 0.7, size * 0.5),
linePaint,
);
// End recording
final picture = recorder.endRecording();
final image = await picture.toImage(size, size);
final byteData = await image.toByteData(format: ui.ImageByteFormat.png);
if (byteData != null) {
final file = File('assets/icons/app_icon_${size}x$size.png');
await file.writeAsBytes(byteData.buffer.asUint8List());
print('Generated icon: ${file.path}');
}
}
// Simple icon untuk development
static Widget buildSimpleApiIcon({double size = 24, Color? color}) {
return Container(
width: size,
height: size,
decoration: BoxDecoration(
color: color ?? Colors.blue,
borderRadius: BorderRadius.circular(size * 0.1),
),
child: Stack(
alignment: Alignment.center,
children: [
// Center dot
Container(
width: size * 0.15,
height: size * 0.15,
decoration: const BoxDecoration(
color: Colors.white,
shape: BoxShape.circle,
),
),
// Left dot
Positioned(
left: size * 0.2,
child: Container(
width: size * 0.1,
height: size * 0.1,
decoration: const BoxDecoration(
color: Colors.white,
shape: BoxShape.circle,
),
),
),
// Right dot
Positioned(
right: size * 0.2,
child: Container(
width: size * 0.1,
height: size * 0.1,
decoration: const BoxDecoration(
color: Colors.white,
shape: BoxShape.circle,
),
),
),
// Connecting lines
Positioned(
left: size * 0.3,
child: Container(
width: size * 0.05,
height: size * 0.02,
color: Colors.white,
),
),
Positioned(
right: size * 0.3,
child: Container(
width: size * 0.05,
height: size * 0.02,
color: Colors.white,
),
),
],
),
);
}
}