import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../app/tema.dart'; import 'nsfw_kataloglari.dart'; import 'resim_form_state.dart'; import 'resim_kataloglari.dart'; import 'resim_sihirbaz_secimleri.dart'; /// Profesyonel sekmeli sihirbaz — kategoriler üstte tab, içerik altta. class ResimSihirbazi extends ConsumerStatefulWidget { const ResimSihirbazi({super.key}); @override ConsumerState createState() => _ResimSihirbaziState(); } class _ResimSihirbaziState extends ConsumerState { int _aktif = 0; @override Widget build(BuildContext context) { final s = ref.watch(resimFormProvider.select((f) => f.sihirbaz)); final n = ref.read(resimFormProvider.notifier); final tablar = _tablariOlustur(s, n); final aktif = _aktif.clamp(0, tablar.length - 1); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Üst aksiyon çubuğu Row( children: [ const Icon(Icons.auto_fix_high, size: 15, color: FikoRenkler.neonMor), const SizedBox(width: 6), const Text('Sihirbaz', style: TextStyle(fontSize: 12.5, fontWeight: FontWeight.w700)), const Spacer(), TextButton.icon( style: TextButton.styleFrom( visualDensity: VisualDensity.compact, padding: const EdgeInsets.symmetric(horizontal: 8)), icon: const Icon(Icons.casino, size: 15), label: const Text('Rastgele', style: TextStyle(fontSize: 11.5)), onPressed: n.rastgeleDoldur, ), TextButton.icon( style: TextButton.styleFrom( visualDensity: VisualDensity.compact, padding: const EdgeInsets.symmetric(horizontal: 8)), icon: const Icon(Icons.cleaning_services, size: 14), label: const Text('Temizle', style: TextStyle(fontSize: 11.5)), onPressed: n.sihirbazTemizle, ), const SizedBox(width: 6), // NSFW (18+) toggle GestureDetector( onTap: () => n.nsfwAc(!s.nsfwAcik), child: Container( padding: const EdgeInsets.symmetric(horizontal: 9, vertical: 5), decoration: BoxDecoration( color: s.nsfwAcik ? const Color(0xFFFF2E6A).withValues(alpha: 0.22) : Theme.of(context).colorScheme.surface, borderRadius: BorderRadius.circular(7), border: Border.all( color: s.nsfwAcik ? const Color(0xFFFF2E6A) : Theme.of(context).dividerColor, width: s.nsfwAcik ? 1.3 : 1), ), child: Row(mainAxisSize: MainAxisSize.min, children: [ Icon(s.nsfwAcik ? Icons.lock_open : Icons.lock, size: 13, color: s.nsfwAcik ? const Color(0xFFFF2E6A) : Theme.of(context) .colorScheme .onSurface .withValues(alpha: 0.5)), const SizedBox(width: 4), Text('18+', style: TextStyle( fontSize: 11, fontWeight: FontWeight.w800, color: s.nsfwAcik ? const Color(0xFFFF2E6A) : Theme.of(context).colorScheme.onSurface)), ]), ), ), ], ), const SizedBox(height: 6), // Kategori sekme çubuğu (yatay kaydırmalı) SizedBox( height: 32, child: ListView.separated( scrollDirection: Axis.horizontal, itemCount: tablar.length, separatorBuilder: (_, _) => const SizedBox(width: 5), itemBuilder: (_, i) => _TabCip( etiket: tablar[i].etiket, ikon: tablar[i].ikon, renk: tablar[i].renk, secili: i == aktif, dolu: tablar[i].dolu, onTap: () => setState(() => _aktif = i), ), ), ), const Divider(height: 14), // Aktif sekme içeriği Padding( padding: const EdgeInsets.only(bottom: 4), child: tablar[aktif].icerik, ), ], ); } List<_Tab> _tablariOlustur( ResimSihirbazSecimleri s, ResimFormNotifier n) { final tablar = <_Tab>[]; if (s.modu == ResimModu.karakter) { tablar.addAll([ _Tab('Temel', Icons.person, FikoRenkler.neonCyan, _karakterTemel(s, n), s.cinsiyet.isNotEmpty || s.etnik.isNotEmpty), _Tab('Saç & Göz', Icons.face, FikoRenkler.neonAmber, _karakterSac(s, n), s.sacRengi.isNotEmpty || s.gozRengi.isNotEmpty), _Tab('Kıyafet', Icons.checkroom, FikoRenkler.neonPembe, _karakterKiyafet(s, n), s.kiyafetTipi.isNotEmpty || s.aksesuarlar.isNotEmpty), _Tab('İfade & Poz', Icons.theaters, FikoRenkler.neonYesil, _karakterPoz(s, n), s.ruhHali.isNotEmpty || s.pozTipi.isNotEmpty), ]); } else if (s.modu == ResimModu.mekan) { tablar.addAll([ _Tab('Mekan', Icons.place, FikoRenkler.neonCyan, _mekan(s, n), s.spesifikMekan.isNotEmpty), _Tab('Zaman & Hava', Icons.wb_sunny, FikoRenkler.neonAmber, _mekanZaman(s, n), s.saatDilimi.isNotEmpty || s.hava.isNotEmpty), ]); } else if (s.modu == ResimModu.urun) { tablar.add(_Tab('Ürün', Icons.shopping_bag, FikoRenkler.neonAmber, _urun(s, n), s.urunKategori.isNotEmpty)); } // Ortak sekmeler (her modda) tablar.addAll([ _Tab('Stil', Icons.palette, FikoRenkler.neonMor, _stil(s, n), s.sanatStili.isNotEmpty || s.sanatciStili.isNotEmpty), _Tab('Lens & Işık', Icons.camera_alt, FikoRenkler.neonAmber, _lensIsik(s, n), s.lens.isNotEmpty || s.isiklandirma.isNotEmpty), _Tab('Renk & Atm.', Icons.color_lens, FikoRenkler.neonPembe, _renkAtmosfer(s, n), s.renkPaleti.isNotEmpty || s.atmosfer.isNotEmpty), _Tab('Kalite', Icons.star, FikoRenkler.neonYesil, _kalite(s, n), s.kaliteEtiketleri.isNotEmpty), _Tab('Negatif', Icons.block, const Color(0xFFFF5370), _negatif(s, n), s.negatifSet != 'genel_anatomi' || s.kullaniciNegatif.isNotEmpty), ]); if (s.nsfwAcik) { tablar.add(_Tab('🔞 NSFW', Icons.local_fire_department, const Color(0xFFFF2E6A), _nsfw(s, n), s.nsfwSeviye.isNotEmpty || s.nsfwSecimler.isNotEmpty)); } return tablar; } Widget _nsfw(ResimSihirbazSecimleri s, ResimFormNotifier n) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: const EdgeInsets.symmetric(horizontal: 9, vertical: 6), decoration: BoxDecoration( color: const Color(0xFFFF2E6A).withValues(alpha: 0.1), borderRadius: BorderRadius.circular(7), ), child: const Text( '18+ içerik · uncensored model + NSFW LoRA otomatik eklendi', style: TextStyle(fontSize: 10.5, color: Color(0xFFFF2E6A))), ), const SizedBox(height: 6), for (final g in NsfwKataloglari.gruplar) g.cokluSecim ? _CokluSecimSatiri( etiket: g.ad, ogeler: g.ogeler, secili: s.nsfwSecimler, onDegisti: (yeni) => n.sihirbazGuncelle(s.kopyala(nsfwSecimler: yeni)), ) : _TekSecimSatiri( etiket: g.ad, ogeler: g.ogeler, secili: s.nsfwSeviye, onSec: (id) => n.sihirbazGuncelle(s.kopyala(nsfwSeviye: id)), ), ], ); } // ── Karakter sekmeleri ── Widget _karakterTemel(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('Cinsiyet', ResimKataloglari.cinsiyetler, s.cinsiyet, (id) => n.sihirbazGuncelle(s.kopyala(cinsiyet: id))), _yasSlider(s, n), _tek('Etnik', ResimKataloglari.etnikKoken, s.etnik, (id) => n.sihirbazGuncelle(s.kopyala(etnik: id)), aramali: true), _tek('Yüz şekli', ResimKataloglari.yuzSekli, s.yuzSekli, (id) => n.sihirbazGuncelle(s.kopyala(yuzSekli: id))), _tek('Vücut', ResimKataloglari.vucutTipi, s.vucutTipi, (id) => n.sihirbazGuncelle(s.kopyala(vucutTipi: id))), _tek('Ten', ResimKataloglari.tenRengi, s.tenRengi, (id) => n.sihirbazGuncelle(s.kopyala(tenRengi: id))), _tek('Kaş', ResimKataloglari.kasSekli, s.kasSekli, (id) => n.sihirbazGuncelle(s.kopyala(kasSekli: id))), _ekstraNot('Karakter ekstra (İngilizce)', s.karakterEkstra, (v) => n.sihirbazGuncelle(s.kopyala(karakterEkstra: v))), ]); Widget _karakterSac(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('Saç rengi', ResimKataloglari.sacRengi, s.sacRengi, (id) => n.sihirbazGuncelle(s.kopyala(sacRengi: id))), _tek('Saç uzunluk', ResimKataloglari.sacUzunluk, s.sacUzunluk, (id) => n.sihirbazGuncelle(s.kopyala(sacUzunluk: id))), _tek('Saç stili', ResimKataloglari.sacStili, s.sacStili, (id) => n.sihirbazGuncelle(s.kopyala(sacStili: id))), _tek('Göz rengi', ResimKataloglari.gozRengi, s.gozRengi, (id) => n.sihirbazGuncelle(s.kopyala(gozRengi: id))), _tek('Makyaj', ResimKataloglari.makyajYogunluk, s.makyaj, (id) => n.sihirbazGuncelle(s.kopyala(makyaj: id))), ]); Widget _karakterKiyafet(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('Kıyafet rengi', ResimKataloglari.kiyafetRengi, s.kiyafetRengi, (id) => n.sihirbazGuncelle(s.kopyala(kiyafetRengi: id))), _tek('Kıyafet tipi', ResimKataloglari.kiyafetTipi, s.kiyafetTipi, (id) => n.sihirbazGuncelle(s.kopyala(kiyafetTipi: id))), _coklu('Aksesuar', ResimKataloglari.aksesuarlar, s.aksesuarlar, (yeni) => n.sihirbazGuncelle(s.kopyala(aksesuarlar: yeni))), ]); Widget _karakterPoz(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('Ruh hali', ResimKataloglari.ruhHali, s.ruhHali, (id) => n.sihirbazGuncelle(s.kopyala(ruhHali: id))), _tek('Poz', ResimKataloglari.pozTipi, s.pozTipi, (id) => n.sihirbazGuncelle(s.kopyala(pozTipi: id))), ]); // ── Mekan sekmeleri ── Widget _mekan(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('İç/Dış', ResimKataloglari.mekanTipi, s.mekanTipi, (id) => n.sihirbazGuncelle(s.kopyala(mekanTipi: id))), _tek('Mekan', ResimKataloglari.spesifikMekan, s.spesifikMekan, (id) => n.sihirbazGuncelle(s.kopyala(spesifikMekan: id)), aramali: true), _tek('Mimari', ResimKataloglari.mimariStil, s.mimariStil, (id) => n.sihirbazGuncelle(s.kopyala(mimariStil: id))), _tek('Bakış açısı', ResimKataloglari.bakisAcisi, s.bakisAcisi, (id) => n.sihirbazGuncelle(s.kopyala(bakisAcisi: id))), _ekstraNot('Mekan ekstra (İngilizce)', s.mekanEkstra, (v) => n.sihirbazGuncelle(s.kopyala(mekanEkstra: v))), ]); Widget _mekanZaman(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('Mevsim', ResimKataloglari.mevsim, s.mevsim, (id) => n.sihirbazGuncelle(s.kopyala(mevsim: id))), _tek('Saat', ResimKataloglari.saatDilimi, s.saatDilimi, (id) => n.sihirbazGuncelle(s.kopyala(saatDilimi: id))), _tek('Hava', ResimKataloglari.hava, s.hava, (id) => n.sihirbazGuncelle(s.kopyala(hava: id))), _tek('Kalabalık', ResimKataloglari.kalabalik, s.kalabalik, (id) => n.sihirbazGuncelle(s.kopyala(kalabalik: id))), ]); // ── Ürün sekmesi ── Widget _urun(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('Kategori', ResimKataloglari.urunKategorisi, s.urunKategori, (id) => n.sihirbazGuncelle(s.kopyala(urunKategori: id)), aramali: true), Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: Row(children: [ Expanded( child: TextFormField( key: ValueKey('marka_${s.urunMarka.hashCode}'), initialValue: s.urunMarka, decoration: const InputDecoration( labelText: 'Marka', hintText: 'Apple, Rolex...'), onChanged: (v) => n.sihirbazGuncelle(s.kopyala(urunMarka: v)), ), ), const SizedBox(width: 8), Expanded( child: TextFormField( key: ValueKey('renk_${s.urunRenk.hashCode}'), initialValue: s.urunRenk, decoration: const InputDecoration(labelText: 'Renk'), onChanged: (v) => n.sihirbazGuncelle(s.kopyala(urunRenk: v)), ), ), ]), ), _tek('Materyal', ResimKataloglari.urunMateryal, s.urunMateryal, (id) => n.sihirbazGuncelle(s.kopyala(urunMateryal: id))), _tek('Arka plan', ResimKataloglari.urunArkaPlan, s.urunArkaPlan, (id) => n.sihirbazGuncelle(s.kopyala(urunArkaPlan: id))), _tek('Açı', ResimKataloglari.urunCekimAcisi, s.urunAcisi, (id) => n.sihirbazGuncelle(s.kopyala(urunAcisi: id))), _coklu('Props', ResimKataloglari.urunPropsListesi, s.urunProps, (yeni) => n.sihirbazGuncelle(s.kopyala(urunProps: yeni))), _ekstraNot('Ürün ekstra (İngilizce)', s.urunEkstra, (v) => n.sihirbazGuncelle(s.kopyala(urunEkstra: v))), ]); // ── Ortak sekmeler ── Widget _stil(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('Stil', ResimKataloglari.sanatStilleri, s.sanatStili, (id) => n.sihirbazGuncelle(s.kopyala(sanatStili: id)), aramali: true), _tek('Sanatçı', ResimKataloglari.sanatciStilleri, s.sanatciStili, (id) => n.sihirbazGuncelle(s.kopyala(sanatciStili: id)), aramali: true), ]); Widget _lensIsik(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('Lens', ResimKataloglari.lensler, s.lens, (id) => n.sihirbazGuncelle(s.kopyala(lens: id))), _tek('Işık', ResimKataloglari.isiklandirma, s.isiklandirma, (id) => n.sihirbazGuncelle(s.kopyala(isiklandirma: id)), aramali: true), _tek('Kompozisyon', ResimKataloglari.kompozisyon, s.kompozisyon, (id) => n.sihirbazGuncelle(s.kopyala(kompozisyon: id))), ]); Widget _renkAtmosfer(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ _tek('Renk paleti', ResimKataloglari.renkPaleti, s.renkPaleti, (id) => n.sihirbazGuncelle(s.kopyala(renkPaleti: id))), _tek('Atmosfer', ResimKataloglari.atmosfer, s.atmosfer, (id) => n.sihirbazGuncelle(s.kopyala(atmosfer: id))), ]); Widget _kalite(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ _coklu('Kalite etiketleri', ResimKataloglari.kaliteEtiketleri, s.kaliteEtiketleri, (yeni) => n.sihirbazGuncelle(s.kopyala(kaliteEtiketleri: yeni))), _ekstraNot('Ekstra not (İngilizce, prompt sonuna)', s.ekstraNot, (v) => n.sihirbazGuncelle(s.kopyala(ekstraNot: v))), ], ); Widget _negatif(ResimSihirbazSecimleri s, ResimFormNotifier n) => Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text('Hazır negatif set', style: TextStyle(fontSize: 11.5, fontWeight: FontWeight.w600)), const SizedBox(height: 4), Wrap(spacing: 5, runSpacing: 5, children: [ for (final (id, etiket) in const [ ('yok', 'Yok'), ('genel', 'Genel'), ('genel_anatomi', 'Genel + Anatomi'), ('fotoreel', 'Foto-gerçek'), ('anime', 'Anime'), ]) _MiniCip( etiket: etiket, secili: s.negatifSet == id, renk: const Color(0xFFFF5370), onTap: () => n.sihirbazGuncelle(s.kopyala(negatifSet: id)), ), ]), _ekstraNot('Ek negatif (İngilizce)', s.kullaniciNegatif, (v) => n.sihirbazGuncelle(s.kopyala(kullaniciNegatif: v))), ], ); // ── Yardımcı render'lar ── Widget _yasSlider(ResimSihirbazSecimleri s, ResimFormNotifier n) => Row( children: [ const SizedBox( width: 78, child: Text('Yaş', style: TextStyle( fontSize: 11.5, fontWeight: FontWeight.w600))), Expanded( child: Slider( value: s.yas.toDouble().clamp(1, 90), min: 1, max: 90, divisions: 89, onChanged: (v) => n.sihirbazGuncelle(s.kopyala(yas: v.round())), ), ), SizedBox( width: 40, child: Text('${s.yas}', textAlign: TextAlign.right, style: const TextStyle( fontSize: 11.5, color: FikoRenkler.neonCyan))), ], ); Widget _tek(String etiket, List ogeler, String secili, ValueChanged onSec, {bool aramali = false}) => _TekSecimSatiri( etiket: etiket, ogeler: ogeler, secili: secili, onSec: onSec, aramali: aramali); Widget _coklu(String etiket, List ogeler, Set secili, ValueChanged> onDegisti) => _CokluSecimSatiri( etiket: etiket, ogeler: ogeler, secili: secili, onDegisti: onDegisti); Widget _ekstraNot(String etiket, String deger, ValueChanged onChg) => Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: TextFormField( key: ValueKey('$etiket${deger.hashCode}'), initialValue: deger, decoration: InputDecoration(labelText: etiket), maxLines: 2, style: const TextStyle(fontSize: 12), onChanged: onChg, ), ); } class _Tab { const _Tab(this.etiket, this.ikon, this.renk, this.icerik, this.dolu); final String etiket; final IconData ikon; final Color renk; final Widget icerik; final bool dolu; } class _TabCip extends StatelessWidget { const _TabCip({ required this.etiket, required this.ikon, required this.renk, required this.secili, required this.dolu, required this.onTap, }); final String etiket; final IconData ikon; final Color renk; final bool secili; final bool dolu; final VoidCallback onTap; @override Widget build(BuildContext context) { final tema = Theme.of(context); return GestureDetector( onTap: onTap, child: AnimatedContainer( duration: const Duration(milliseconds: 140), padding: const EdgeInsets.symmetric(horizontal: 11, vertical: 6), decoration: BoxDecoration( color: secili ? renk.withValues(alpha: 0.2) : tema.colorScheme.surface, borderRadius: BorderRadius.circular(8), border: Border.all( color: secili ? renk : tema.dividerColor, width: secili ? 1.4 : 1, ), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon(ikon, size: 14, color: secili ? renk : tema.colorScheme.onSurface.withValues(alpha: 0.6)), const SizedBox(width: 5), Text(etiket, style: TextStyle( fontSize: 11.5, fontWeight: secili ? FontWeight.w700 : FontWeight.w500, color: secili ? renk : tema.colorScheme.onSurface)), if (dolu && !secili) ...[ const SizedBox(width: 4), Container( width: 6, height: 6, decoration: BoxDecoration(color: renk, shape: BoxShape.circle), ), ], ], ), ), ); } } /// Etiket + arama destekli tek seçim çipleri satırı. class _TekSecimSatiri extends StatefulWidget { const _TekSecimSatiri({ required this.etiket, required this.ogeler, required this.secili, required this.onSec, this.aramali = false, }); final String etiket; final List ogeler; final String secili; final ValueChanged onSec; final bool aramali; @override State<_TekSecimSatiri> createState() => _TekSecimSatiriState(); } class _TekSecimSatiriState extends State<_TekSecimSatiri> { String _arama = ''; @override Widget build(BuildContext context) { final filtreli = _arama.isEmpty ? widget.ogeler : widget.ogeler .where((o) => o.etiketTr.toLowerCase().contains(_arama) || o.promptEn.toLowerCase().contains(_arama)) .toList(); return Padding( padding: const EdgeInsets.symmetric(vertical: 3), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ SizedBox( width: 78, child: Text(widget.etiket, style: const TextStyle( fontSize: 11.5, fontWeight: FontWeight.w600)), ), if (widget.aramali) Expanded( child: SizedBox( height: 26, child: TextField( style: const TextStyle(fontSize: 11), decoration: const InputDecoration( isDense: true, hintText: 'ara...', contentPadding: EdgeInsets.symmetric( horizontal: 8, vertical: 4)), onChanged: (v) => setState(() => _arama = v.toLowerCase().trim()), ), ), ), ], ), const SizedBox(height: 4), Wrap( spacing: 5, runSpacing: 5, children: [ for (final o in filtreli) _MiniCip( etiket: o.etiketTr, secili: widget.secili == o.id, onTap: () => widget.onSec(widget.secili == o.id ? '' : o.id), ), ], ), ], ), ); } } /// Çoklu seçim çipleri satırı. class _CokluSecimSatiri extends StatelessWidget { const _CokluSecimSatiri({ required this.etiket, required this.ogeler, required this.secili, required this.onDegisti, }); final String etiket; final List ogeler; final Set secili; final ValueChanged> onDegisti; @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(vertical: 3), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(secili.isEmpty ? etiket : '$etiket (${secili.length})', style: const TextStyle( fontSize: 11.5, fontWeight: FontWeight.w600)), const SizedBox(height: 4), Wrap( spacing: 5, runSpacing: 5, children: [ for (final o in ogeler) _MiniCip( etiket: o.etiketTr, secili: secili.contains(o.id), onTap: () { final yeni = Set.from(secili); yeni.contains(o.id) ? yeni.remove(o.id) : yeni.add(o.id); onDegisti(yeni); }, ), ], ), ], ), ); } } class _MiniCip extends StatelessWidget { const _MiniCip({ required this.etiket, required this.secili, required this.onTap, this.renk, }); final String etiket; final bool secili; final VoidCallback onTap; final Color? renk; @override Widget build(BuildContext context) { final tema = Theme.of(context); final vurgu = renk ?? FikoRenkler.neonPembe; return GestureDetector( onTap: onTap, child: AnimatedContainer( duration: const Duration(milliseconds: 120), padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 3.5), decoration: BoxDecoration( color: secili ? vurgu.withValues(alpha: 0.22) : tema.colorScheme.surface, borderRadius: BorderRadius.circular(6), border: Border.all( color: secili ? vurgu : tema.dividerColor, width: secili ? 1.2 : 1), ), child: Text(etiket, style: TextStyle( fontSize: 11, height: 1.1, fontWeight: secili ? FontWeight.w700 : FontWeight.w500, color: secili ? vurgu : tema.colorScheme.onSurface)), ), ); } }