178 lines
3.7 KiB
Dart
178 lines
3.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
/// Utilitas untuk mengkategorikan tanaman berdasarkan nama atau deskripsinya
|
|
class PlantCategorizer {
|
|
// Kategori utama
|
|
static const String TANAMAN_PANGAN = 'Tanaman Pangan';
|
|
static const String SAYURAN = 'Sayuran';
|
|
static const String BUAH_BUAHAN = 'Buah-buahan';
|
|
static const String REMPAH = 'Rempah';
|
|
static const String UMUM = 'Umum';
|
|
|
|
// Daftar tanaman pangan
|
|
static final List<String> _tanamanPangan = [
|
|
'padi',
|
|
'beras',
|
|
'jagung',
|
|
'gandum',
|
|
'kedelai',
|
|
'kacang tanah',
|
|
'kacang kedelai',
|
|
'kacang hijau',
|
|
'ubi',
|
|
'ubi kayu',
|
|
'singkong',
|
|
'ubi jalar',
|
|
'talas',
|
|
'sorghum',
|
|
'jewawut',
|
|
];
|
|
|
|
// Daftar sayuran
|
|
static final List<String> _sayuran = [
|
|
'bayam',
|
|
'kangkung',
|
|
'sawi',
|
|
'selada',
|
|
'kubis',
|
|
'kol',
|
|
'brokoli',
|
|
'wortel',
|
|
'tomat',
|
|
'terong',
|
|
'timun',
|
|
'ketimun',
|
|
'mentimun',
|
|
'labu',
|
|
'kacang panjang',
|
|
'buncis',
|
|
'pare',
|
|
'daun singkong',
|
|
'daun pepaya',
|
|
'kemangi',
|
|
'selada air',
|
|
'asparagus',
|
|
'bawang',
|
|
'kentang',
|
|
'cabai',
|
|
'paprika',
|
|
'lobak',
|
|
'bit',
|
|
'seledri',
|
|
];
|
|
|
|
// Daftar buah-buahan
|
|
static final List<String> _buahBuahan = [
|
|
'mangga',
|
|
'jeruk',
|
|
'pisang',
|
|
'pepaya',
|
|
'jambu',
|
|
'jambu biji',
|
|
'jambu air',
|
|
'apel',
|
|
'anggur',
|
|
'manggis',
|
|
'durian',
|
|
'rambutan',
|
|
'alpukat',
|
|
'semangka',
|
|
'melon',
|
|
'pir',
|
|
'strawberry',
|
|
'nangka',
|
|
'sirsak',
|
|
'sawo',
|
|
'salak',
|
|
'markisa',
|
|
'belimbing',
|
|
];
|
|
|
|
// Daftar rempah-rempah
|
|
static final List<String> _rempah = [
|
|
'jahe',
|
|
'kunyit',
|
|
'lengkuas',
|
|
'sereh',
|
|
'kemangi',
|
|
'daun salam',
|
|
'daun jeruk',
|
|
'kayu manis',
|
|
'cengkeh',
|
|
'pala',
|
|
'lada',
|
|
'merica',
|
|
'ketumbar',
|
|
'jintan',
|
|
'kemiri',
|
|
'kapulaga',
|
|
'vanili',
|
|
'temulawak',
|
|
'kencur',
|
|
'bawang putih',
|
|
'bawang merah',
|
|
];
|
|
|
|
/// Mengategorikan tanaman berdasarkan nama dan deskripsi
|
|
static String categorize(String name, {String? description}) {
|
|
final String text =
|
|
'${name.toLowerCase()} ${description?.toLowerCase() ?? ''}';
|
|
|
|
// Cek kategori berdasarkan teks
|
|
if (_containsAny(text, _tanamanPangan)) {
|
|
return TANAMAN_PANGAN;
|
|
} else if (_containsAny(text, _sayuran)) {
|
|
return SAYURAN;
|
|
} else if (_containsAny(text, _buahBuahan)) {
|
|
return BUAH_BUAHAN;
|
|
} else if (_containsAny(text, _rempah)) {
|
|
return REMPAH;
|
|
}
|
|
|
|
// Default jika tidak ditemukan
|
|
return UMUM;
|
|
}
|
|
|
|
/// Helper untuk mengecek apakah teks mengandung salah satu keyword
|
|
static bool _containsAny(String text, List<String> keywords) {
|
|
for (final keyword in keywords) {
|
|
if (text.contains(keyword)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/// Mendapatkan warna berdasarkan kategori
|
|
static Color getCategoryColor(String category) {
|
|
switch (category.toLowerCase()) {
|
|
case 'tanaman pangan':
|
|
return const Color(0xFF4CAF50); // Green
|
|
case 'sayuran':
|
|
return const Color(0xFF8BC34A); // Light Green
|
|
case 'buah-buahan':
|
|
return const Color(0xFFFF9800); // Orange
|
|
case 'rempah':
|
|
return const Color(0xFF795548); // Brown
|
|
default:
|
|
return const Color(0xFF0F6848); // Default green
|
|
}
|
|
}
|
|
|
|
/// Mendapatkan icon berdasarkan kategori
|
|
static IconData getCategoryIcon(String category) {
|
|
switch (category.toLowerCase()) {
|
|
case 'tanaman pangan':
|
|
return Icons.grass;
|
|
case 'sayuran':
|
|
return Icons.eco;
|
|
case 'buah-buahan':
|
|
return Icons.local_florist;
|
|
case 'rempah':
|
|
return Icons.spa;
|
|
default:
|
|
return Icons.menu_book;
|
|
}
|
|
}
|
|
}
|