MIF_E31222656/lib/screens/community/utils/plant_categorizer.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;
}
}
}