TKK_Nisa_E32221364/scripts/generate_icon.dart

137 lines
4.1 KiB
Dart

import 'dart:io';
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
// Script untuk generate icon PNG dari Flutter widget
Future<void> generateIcon() async {
WidgetsFlutterBinding.ensureInitialized();
const size = 512;
final recorder = ui.PictureRecorder();
final canvas = Canvas(recorder);
// Background gradient
final backgroundPaint =
Paint()
..shader = const LinearGradient(
colors: [Color(0xFF1976D2), Color(0xFF2196F3)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
).createShader(Rect.fromLTWH(0, 0, size.toDouble(), size.toDouble()));
// Draw rounded background
canvas.drawRRect(
RRect.fromLTRBR(
0,
0,
size.toDouble(),
size.toDouble(),
const Radius.circular(80),
),
backgroundPaint,
);
// White paint for elements
final whitePaint =
Paint()
..color = Colors.white
..style = PaintingStyle.fill;
final linePaint =
Paint()
..color = Colors.white
..strokeWidth = 8
..strokeCap = StrokeCap.round;
// Draw API connection lines
// Left side
canvas.drawLine(const Offset(80, 200), const Offset(180, 200), linePaint);
canvas.drawLine(const Offset(80, 256), const Offset(180, 256), linePaint);
canvas.drawLine(const Offset(80, 312), const Offset(180, 312), linePaint);
// Right side
canvas.drawLine(const Offset(332, 200), const Offset(432, 200), linePaint);
canvas.drawLine(const Offset(332, 256), const Offset(432, 256), linePaint);
canvas.drawLine(const Offset(332, 312), const Offset(432, 312), linePaint);
// Central connections
canvas.drawLine(const Offset(200, 200), const Offset(220, 200), linePaint);
canvas.drawLine(const Offset(200, 256), const Offset(220, 256), linePaint);
canvas.drawLine(const Offset(200, 312), const Offset(220, 312), linePaint);
canvas.drawLine(const Offset(292, 200), const Offset(312, 200), linePaint);
canvas.drawLine(const Offset(292, 256), const Offset(312, 256), linePaint);
canvas.drawLine(const Offset(292, 312), const Offset(312, 312), linePaint);
// Draw API nodes (circles)
canvas.drawCircle(const Offset(60, 200), 20, whitePaint);
canvas.drawCircle(const Offset(60, 256), 20, whitePaint);
canvas.drawCircle(const Offset(60, 312), 20, whitePaint);
canvas.drawCircle(const Offset(452, 200), 20, whitePaint);
canvas.drawCircle(const Offset(452, 256), 20, whitePaint);
canvas.drawCircle(const Offset(452, 312), 20, whitePaint);
// Central processing unit
canvas.drawRRect(
RRect.fromLTRBR(220, 180, 292, 312, const Radius.circular(12)),
whitePaint,
);
// Fire detection symbol
final firePaint =
Paint()
..shader = const LinearGradient(
colors: [Color(0xFFFF5722), Color(0xFFF44336)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
).createShader(const Rect.fromLTWH(240, 190, 32, 60));
// Simple fire shape
final firePath =
Path()
..moveTo(256, 190)
..quadraticBezierTo(240, 200, 245, 220)
..quadraticBezierTo(250, 235, 256, 240)
..quadraticBezierTo(262, 235, 267, 220)
..quadraticBezierTo(272, 200, 256, 190);
canvas.drawPath(firePath, firePaint);
// Status indicator
final statusPaint = Paint()..color = const Color(0xFF4CAF50);
canvas.drawCircle(const Offset(400, 112), 24, statusPaint);
// Check mark
final checkPaint =
Paint()
..color = Colors.white
..strokeWidth = 4
..strokeCap = StrokeCap.round
..style = PaintingStyle.stroke;
final checkPath =
Path()
..moveTo(388, 112)
..lineTo(396, 120)
..lineTo(412, 104);
canvas.drawPath(checkPath, checkPaint);
// Create image
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.png');
await file.writeAsBytes(byteData.buffer.asUint8List());
print('Icon generated successfully: ${file.path}');
}
}
void main() async {
await generateIcon();
}