import 'package:fikoyt_akcali_v1/apps/finans/core/models/finans.model.dart'; import 'package:fikoyt_akcali_v1/apps/finans/core/services/etiketler_service.dart'; import 'package:fikoyt_akcali_v1/apps/finans/core/services/finans.servis.dart'; import 'package:fikoyt_akcali_v1/apps/finans/uye/etiketler/etiketler.dart'; import 'package:fikoyt_akcali_v1/apps/finans/uye/hareketler/hareket-ekle/_logic_hareket_ekle.dart'; import 'package:fikoyt_ui/fikoyt_ui.dart'; import 'package:fikoyt_ui/ui/fikoyt_card.dart'; import 'package:fikoyt_ui/ui/yazi_kutulari/yazi_kutulari.dart'; import 'package:flutter/material.dart'; class EtiketSecDialog extends StatefulWidget { EtiketSecDialog({super.key, this.ustKategori}); Rx? ustKategori; @override State createState() => _EtiketSecDialogState(); } class _EtiketSecDialogState extends State { final EtiketlerService etiketlerServis = EtiketlerService(); final FinansServis? finansServis = FikoYTCoreService.servisler.getServis(); final HareketEkleService logic = Get.put(HareketEkleService()); @override void dispose() { etiketlerServis.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return FikoYTCard( key: ValueKey("EtiketListesiDialog"), theme: (Theme.of(context).extension() ?? FikoYTCardTheme()).copyWith( boxConstraints: BoxConstraints(maxWidth: 300), backgroundColor: Theme.of(context).extension()?.backgroundColor, padding: EdgeInsets.zero, ), children: [ Center(child: Text('🏷', style: TextStyle(fontSize: 54))), Center( child: FikoYTButton( text: 'Etiket Seç', tema: Theme.of(context).extension()?.copyWith( textAlign: TextAlign.center, textStrokeColor: Colors.transparent, textColor: Theme.of(context).extension()?.infoTextColor, // textShadow: Theme.of(context).extension()?.textShadow, ), ), ), /** Seçilen Etiketler */ Column( children: [ Container( decoration: BoxDecoration( color: Theme.of(context).extension()?.cardBackgroundColor, borderRadius: BorderRadius.circular(0), border: Border.all(color: Colors.grey.shade400), ), padding: EdgeInsets.symmetric(horizontal: 5, vertical: 5), margin: EdgeInsets.symmetric(vertical: 0, horizontal: 0), child: Row( children: [ FikoYTButton(text: "Seçilen Etiketler", tema: FikoYTButtonTheme(fontSize: 12)), Spacer(), Obx( () => AnimatedFikoYTButton1( text: logic.etiketler.isNotEmpty ? "${logic.etiketler.length} Adet" : "Yok", tema: FikoYTButtonTheme(fontSize: 12), ), ), ], ), ), /// Mini Liste Obx( () => AnimatedSwitcher( duration: const Duration(milliseconds: 500), layoutBuilder: (Widget? currentChild, List previousChildren) { return Stack( alignment: Alignment.topCenter, children: [...previousChildren, if (currentChild != null) currentChild], ); }, transitionBuilder: (Widget child, Animation animation) { return FadeTransition( opacity: animation, child: SizeTransition(sizeFactor: animation, axisAlignment: 1.0, child: Center(child: child)), ); }, child: logic.etiketler.isNotEmpty ? Padding( padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 5), child: Wrap( spacing: 2, runSpacing: 2, children: (logic.etiketler.toList()) .asMap() .entries .map((entry) { int index = entry.key; return FikoYTButton( text: "${logic.etiketler[index].simge} ${logic.etiketler[index].ismi}", tema: FikoYTButtonTheme( fontSize: 12, backgroundColor: Colors.white, fontWeight: FontWeight.w200, edgePadding: EdgeInsets.all(2), borderColor: Colors.blue, ), onPressed: () { logic.etiketler.removeWhere((element) => element.id == logic.etiketler[index].id); logic.etiketler.refresh(); }, ); }) .toList() .cast(), ), ) : Container( padding: const EdgeInsets.only(bottom: 10, top: 10, left: 5, right: 5), margin: EdgeInsets.all(5), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: Theme.of(context).extension()?.cardBackgroundColor, border: Border.all(color: Colors.grey.shade400), ), child: Column( children: [ const Row( mainAxisAlignment: MainAxisAlignment.center, children: [Text("💸", style: TextStyle(fontSize: 32))], ), FikoYTButton( text: "Seçilen Etiket Yok", tema: Theme.of(context).extension()?.copyWith( textColor: Theme.of(context).extension()?.errorTextColor, textStrokeColor: Colors.white, fontSize: 12, ), ), ], ), ), ), ), ], ), Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, spacing: 5, children: [ FikoYaziKutusu( baslik: "Arama Yap", simgeSol: const Text("✏️", style: TextStyle(fontSize: 14)), yaziBoyutu: 12.0, radius: 5.0, degeri: "", degisti: (value) {}, ), Divider(height: 4), Container( decoration: BoxDecoration( color: Theme.of(context).extension()?.cardBackgroundColor, borderRadius: BorderRadius.circular(0), border: Border.all(color: Colors.grey.shade400), ), padding: EdgeInsets.symmetric(horizontal: 5, vertical: 5), margin: EdgeInsets.symmetric(vertical: 0, horizontal: 0), child: Row( children: [ AnimatedFikoYTButton1(text: "Etiket Listesi", tema: FikoYTButtonTheme(fontSize: 12)), Spacer(), finansServis?.animasyonluWidgetAc( mevcutWidget: (context, action) { // girisAction = action; return FikoYTButton( text: "+", tema: FikoYTButtonTheme( fontSize: 18, fontWeight: FontWeight.bold, edgePadding: EdgeInsets.symmetric(horizontal: 3, vertical: 3), ), ); }, acilacakWidget: (context, action) { return SayfaEtiketler(); }, onClosed: (p0) { setState(() { logic.etiketler.refresh(); logic.kyt.refresh(); }); }, ), ], ), ), /// AnimatedSwitcher( duration: const Duration(milliseconds: 500), layoutBuilder: (Widget? currentChild, List previousChildren) { return Stack( alignment: Alignment.topCenter, children: [...previousChildren, if (currentChild != null) currentChild], ); }, transitionBuilder: (Widget child, Animation animation) { return FadeTransition( opacity: animation, child: SizeTransition(sizeFactor: animation, axisAlignment: 1.0, child: Center(child: child)), ); }, // visible: logic.aktifHareket.value != null ? logic.aktifHareket.value!.altKartlar.isEmpty : false, child: etiketlerServis.liste.isEmpty ? Container( // width: double.infinity, padding: const EdgeInsets.only(bottom: 20, top: 20, left: 5, right: 5), margin: EdgeInsets.all(10), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: Theme.of(context).extension()?.cardBackgroundColor, border: Border.all(color: Colors.grey.shade400), // boxShadow: [ // BoxShadow(color: Colors.teal.withOpacity(0.15), spreadRadius: -15.0, blurRadius: 12.0), // const BoxShadow(color: Colors.transparent, spreadRadius: -5.0, blurRadius: 12.0), // ], ), child: Column( children: [ const Row( mainAxisAlignment: MainAxisAlignment.center, children: [Text("💸", style: TextStyle(fontSize: 36))], ), FikoYTButton( text: "Etiket Bulunamadı", tema: Theme.of(context).extension()?.copyWith( textColor: Theme.of(context).extension()?.errorTextColor, textStrokeColor: Colors.white, fontSize: 16, ), ), /** */ ], ), ) : Obx(() { final data = etiketlerServis.liste; return Wrap( key: ValueKey(data.length), // Liste değiştiğinde widget yeniden oluşturulacak spacing: 2, runSpacing: 2, children: data.asMap().entries.map((entry) { int index = entry.key; return EtiketlerDialogItem( etkt: data[index], onTap: () { bool varmi = false; for (var item in logic.etiketler) { if (item.id == data[index].id) { varmi = true; break; } } if (varmi) { logic.etiketler.removeWhere((element) => element.id == data[index].id); } else { logic.etiketler.add(data[index]); } logic.etiketler.refresh(); }, ).animate( delay: Duration(milliseconds: index * 50), effects: [ FadeEffect(duration: Duration(milliseconds: 200)), SlideEffect(begin: Offset(0, 0.5), end: Offset(0, 0), curve: Curves.easeInOut), ], ); }).toList(), ); }), ), /// Padding( padding: const EdgeInsets.all(8.0), child: Row( children: [ Spacer(), FikoYTButton( text: "❌ Kapat", tema: FikoYTButtonTheme( // textColor: Colors.white, backgroundColor: Colors.transparent, // fontWeight: FontWeight.w700, edgePadding: EdgeInsets.all(3), borderColor: Colors.red, elevation: 3, fontSize: 12, ), onPressed: () async { context.vRouter.pop(); }, ), ], ), ), ], ), ), ], ); } } class EtiketlerDialogItem extends StatelessWidget { EtiketlerDialogItem({super.key, required this.etkt, this.onTap}); final Etiket etkt; final Function()? onTap; final HareketEkleService logic = Get.put(HareketEkleService()); @override Widget build(BuildContext context) { return FikoYTButton( onPressed: onTap, text: Container( margin: EdgeInsets.symmetric(vertical: 2, horizontal: 10), decoration: BoxDecoration( borderRadius: BorderRadius.circular(5), color: Theme.of(context).extension()?.cardBackgroundColor, border: Border.all(color: Colors.grey.shade400), ), padding: EdgeInsets.all(3), child: Row( children: [ Container( alignment: Alignment.center, decoration: BoxDecoration(borderRadius: BorderRadius.circular(5), color: etkt.rengi), child: FikoYTButton(text: "${etkt.simge}", tema: FikoYTButtonTheme(fontSize: 32)), ), const SizedBox(width: 2), // Boşluk eklemek için Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ FikoYTButton(text: "${etkt.ismi}"), Row( mainAxisAlignment: MainAxisAlignment.end, children: [ Obx(() { // ignore: invalid_use_of_protected_member logic.etiketler.value; return Builder( builder: (context) { var secili = logic.etiketler.where((item) => item.id == etkt.id).isEmpty; return FikoYTButton( text: secili ? "Seç" : "Seçimi Kaldır", tema: FikoYTButtonTheme( fontWeight: FontWeight.w200, fontSize: 10, backgroundColor: secili ? Colors.blue : Colors.red, textColor: Colors.white, edgePadding: EdgeInsets.all(2), ), onPressed: () { bool varmi = false; for (var item in logic.etiketler) { if (item.id == etkt.id) { varmi = true; break; } } if (varmi) { logic.etiketler.removeWhere((element) => element.id == etkt.id); } else { logic.etiketler.add(etkt); } logic.etiketler.refresh(); }, ); }, ); }), ], ), ], ), ), ], ), ), ); // Container( // padding: EdgeInsets.all(3), // child: ListTileTheme( // contentPadding: EdgeInsets.zero, // dense: true, // horizontalTitleGap: 0, // minVerticalPadding: 0, // shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(5)), // child: ListTile( // leading: FikoYTButton(text: "${hsp.simgesi}"), // title: FikoYTButton(text: "${hsp.ismi} ${hsp.paraBirimi.value?.sembol}"), // trailing: FikoYTButton(text: "${hsp.bakiye?.toParaBirimi()}"), // tileColor: Theme.of(context).extension()?.cardBackgroundColor, // isThreeLine: false, // onTap: () { // Navigator.of(context).pop(hsp); // }, // subtitle: FikoYTButton( // text: hsp.aciklama ?? 'Açıklama Yok', // tema: FikoYTButtonTheme(fontWeight: FontWeight.w200, fontSize: 12), // ), // ), // ), // ); } }