import 'package:fikoyt_akcali_v1/apps/finans/core/models/finans.model.dart'; import 'package:fikoyt_akcali_v1/apps/finans/core/services/finans.servis.dart'; import 'package:fikoyt_akcali_v1/apps/finans/core/services/hesap_turleri_service.dart'; import 'package:fikoyt_akcali_v1/apps/finans/uye/hesaplar/_hesaplar-logic.dart'; import 'package:fikoyt_akcali_v1/core/widgets/uygulama_baslik/uygulama_baslik.dart'; import 'package:fikoyt_ui/fikoyt_ui.dart'; import 'package:fikoyt_ui/ui/fikoyt_card.dart'; import 'package:fikoyt_ui/ui/yazi_kutulari/fikoyt_button_kutu.dart'; import 'package:fikoyt_ui/ui/yazi_kutulari/yazi_kutulari.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; class SayfaHesapTuru extends StatefulWidget { SayfaHesapTuru({super.key, kyt, this.animClose}) : yeni = kyt == null ? true : false, kyt = kyt ?? HesapTuru().obs; Rx kyt = HesapTuru().obs; bool? yeni; void Function({Never returnValue})? animClose; @override State createState() => _SayfaHesapTuruState(); } class _SayfaHesapTuruState extends State { FinansServis? finansServis = FikoYTCoreService.servisler.getServis(); HesapTurleriService? logic; HesaplarService? logicHesaplar; var myController = PageController(initialPage: 0, keepPage: true, viewportFraction: 1); @override void initState() { super.initState(); finansServis = FikoYTCoreService.servisler.getServis(); logic = Get.put(HesapTurleriService()); logicHesaplar = Get.put(HesaplarService()); // SchedulerBinding.instance.addPostFrameCallback((_) { // finansServis?.altBaslik.value = widget.yeni == true ? "Yeni Hesap Türü" : "Hesap Türü Düzenle"; // }); } @override void dispose() { // Get.delete(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( leading: UygulamaBaslikSol( simge: Icon(Icons.arrow_back, color: Colors.white), onPressedSimge: () { if (widget.animClose != null) widget.animClose!(); }, ), title: UygulamaBaslikOrta( altBaslik: widget.yeni == true ? "Yeni Hesap Türü" : "Hesap Türü Düzenle"), actions: [ UygulamaBaslikSag( simge: Icon(Icons.save, color: Colors.white), onPressedSimge: () { kaydet(); if (widget.animClose != null) widget.animClose!(); }, ), ], backgroundColor: Theme.of(context).extension()?.appBarColor?.withAlpha(230), ), // drawer: finansServis?.solMenuAl(context), backgroundColor: Theme.of(context).extension()?.backgroundColor, // appBarColor: Theme.of(context).extension()?.appBarColor?.withAlpha(230), extendBody: false, extendBodyBehindAppBar: false, floatingActionButton: FloatingActionButton( onPressed: () { kaydet(); if (widget.animClose != null && !(widget.kyt.value.bosMu) ) widget.animClose!(); }, backgroundColor: Theme.of(context).extension()?.successTextColor, elevation: 5, shape: CircleBorder(), child: FikoYTButton( text: widget.yeni == true ? "💾" : "💫", tema: FikoYTButtonTheme( fontSize: 24, // radius: 80, // edgePadding: EdgeInsets.all(15), // backgroundColor: Theme.of(context).extension()?.successTextColor, ), ), ).animate(effects: [SlideEffect(begin: Offset(20, 0), delay: 50.ms, duration: 1000.ms)]), body: SingleChildScrollView( child: Column( children: [ Center(child: Text('🏷', style: TextStyle(fontSize: 54))), Center( child: FikoYTButton( text: widget.yeni == true ? 'Yeni Hesap Türü' : 'Hesap Türü Güncelle', tema: Theme.of(context).extension()?.copyWith( textAlign: TextAlign.center, textStrokeColor: Colors.transparent, textColor: Theme.of(context).extension()?.infoTextColor, // textShadow: Theme.of(context).extension()?.textShadow, ), ), ), Divider(height: 4), SizedBox(height: 10), Obx( () => Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, spacing: 5, children: [ FikoYaziKutusu( baslik: "Hesap Türü İsmi", simgeSol: const Text("✏️", style: TextStyle(fontSize: 14)), yaziBoyutu: 12.0, radius: 5.0, degeri: widget.kyt.value.ismi, degisti: (value) { widget.kyt.value.ismi = value; }, ), FikoYaziKutusu( baslik: "Sembol", simgeSol: const Text("⭐", style: TextStyle(fontSize: 14)), yaziBoyutu: 12.0, radius: 5.0, degeri: widget.kyt.value.emoji, degisti: (value) { widget.kyt.value.emoji = value; }, ), Obx( () => FikoYTButtonKutu( baslik: "Ana Para Birimi", simgeSol: "⛃", sonEk: Text(widget.kyt.value.anaParaBirimi.value?.sembol ?? ""), // yaziBoyutu: 12.0, radius: 5.0, deger: widget.kyt.value.anaParaBirimi.value?.ismi, onPressed: () { FikoYTCoreService.dialogGoster(context, formParaBirimiListesi(context), null).then((value) { widget.kyt.value.anaParaBirimi.value = value; widget.kyt.refresh(); }); }, ), ), FikoAciklamaKutusu( baslik: "Açıklama", yaziBoyutu: 12.0, radius: 5.0, degeri: widget.kyt.value.aciklama, degisti: (value) { widget.kyt.value.aciklama = value; }, ), /// ExpansionTile( initiallyExpanded: true, title: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Expanded(child: Divider(indent: 0.0, endIndent: 0.0, thickness: 1)), FikoYTButton( text: '🧩 Hesap Özellikleri', tema: Theme.of(context).extension()?.copyWith( textStrokeColor: Colors.transparent, textColor: Theme.of(context).extension()?.textColor?.withAlpha(150), ), ), const Expanded(child: Divider(indent: 0.0, endIndent: 0.0, thickness: 1)), ], ), tilePadding: EdgeInsets.zero, childrenPadding: EdgeInsets.all(0), dense: true, minTileHeight: 0, shape: const Border(), children: [ /// desteklerItem( context, baslik: "Banka Desteği", emoji: "💴", aciklama: "Bu Türde Hesap Oluştururken Eğer Banka Desteği Aktif İse Hesabınız; Banka Hesaplarına Uygun Özelliklerle Donatılacaktır.", veriSeti: widget.kyt.value.bankaDestegi, veriSetiDegisti: (deger) { widget.kyt.value.bankaDestegi = deger; widget.kyt.refresh(); }, ), /// desteklerItem( context, baslik: "Faiz Desteği", emoji: "💯", aciklama: "Bu Seçenek Aktif İse Hesabınız, Faiz Sistemine Uygun Özelliklerle Donatılacaktır.", veriSeti: widget.kyt.value.faizDestegi, veriSetiDegisti: (deger) { widget.kyt.value.faizDestegi = deger; widget.kyt.refresh(); }, ), /// desteklerItem( context, baslik: "Kredi Desteği", emoji: "💸", aciklama: "Bu Seçenek Aktif İse Hesabınız, Çektiğiniz Kredilere Uygun Hesap Özellikleriyle Donatılacaktır.", veriSeti: widget.kyt.value.krediDestegi, veriSetiDegisti: (deger) { widget.kyt.value.krediDestegi = deger; widget.kyt.refresh(); }, ), /// desteklerItem( context, baslik: "Yatırım Desteği", emoji: "☘", aciklama: "Bu Seçenek Aktif İse Hesabınız, Yatırımlarınız İle İlgili Lazım Olabilecek Bir Çok Özelliklerle Donatılacaktır.", veriSeti: widget.kyt.value.yatirimDestegi, veriSetiDegisti: (deger) { widget.kyt.value.yatirimDestegi = deger; widget.kyt.refresh(); }, ), /// desteklerItem( context, baslik: "Hedef Desteği", emoji: "🎯", aciklama: "Bu Seçenekte İse Hesabınızda, Hedefler Belirleyip Takip Edebilir, Hedef Takibi İle İlgili Bir Çok Özelliği Aktif Edebilirsiniz.", veriSeti: widget.kyt.value.hedefDestegi, veriSetiDegisti: (deger) { widget.kyt.value.hedefDestegi = deger; widget.kyt.refresh(); }, ), /// desteklerItem( context, baslik: "Borç Desteği", emoji: "👤", aciklama: "Bu Mükemmel Özellik Aktif İse, Verdiğiniz Borçlarla Alakalı Takiplerinizi Yapabilir, Borç Takibi İle Alakalı Bir Çok Özelliği ve Uygulamayı Aktif Edebilirsiniz.", veriSeti: widget.kyt.value.borcDestegi, veriSetiDegisti: (deger) { widget.kyt.value.borcDestegi = deger; widget.kyt.refresh(); }, ), /// desteklerItem( context, baslik: "Gelir Desteği", emoji: "⤵", aciklama: "Bu Özellik Sayesinde, Hesabınıza Direkt Olarak Gelir Belirleyebileceğiniz Bir Özellik Atanır.Eğer Aktif Değil İse Direkt Gelir Hareketi Gösteremezsiniz.Varsayılan Olarak Aktiftir", veriSeti: widget.kyt.value.gelirDestegi, veriSetiDegisti: (deger) { widget.kyt.value.gelirDestegi = deger; widget.kyt.refresh(); }, ), /// desteklerItem( context, baslik: "Gider Desteği", emoji: "⤴", aciklama: "Bu Özellik Sayesinde, Hesabınıza Direkt Olarak Gider Tanımlayabileceğiniz Bir Özellik Atanır.Eğer Aktif Değil İse Direkt Olarak Gider Hareketi Gösteremezsiniz.Varsayılan Olarak Aktiftir", veriSeti: widget.kyt.value.giderDestegi, veriSetiDegisti: (deger) { widget.kyt.value.giderDestegi = deger; widget.kyt.refresh(); }, ), /// desteklerItem( context, baslik: "Transfer Desteği", emoji: "🔀", aciklama: "Bu Özellik Sayesinde, Hesaplarınız Arası Transferler Yapabilirsiniz.Transferlerle Alakalı Bir Çok Şey Hesabınıza Eklenecektir. Varsayılan Olarak Aktiftir", veriSeti: widget.kyt.value.transferDestegi, veriSetiDegisti: (deger) { widget.kyt.value.transferDestegi = deger; widget.kyt.refresh(); }, ), /// desteklerItem( context, baslik: "Çoklu Para Birimi", emoji: "🧧", aciklama: "Bu Özellik Sayesinde, Hesaplarınızda Birden Fazla Para Birimi Kullanabilirsiniz", veriSeti: widget.kyt.value.cokluParaBirimiDestegi, veriSetiDegisti: (deger) { widget.kyt.value.cokluParaBirimiDestegi = deger; widget.kyt.refresh(); }, ), ], ), /// ], ), ), ), SizedBox(height: 200), ], ), ), ); } Widget desteklerItem( BuildContext context, { required String baslik, required String emoji, required String aciklama, required bool? veriSeti, required Function(bool deger) veriSetiDegisti, }) { // var baslik = "Hedef Desteği"; // var emoji = '🎯'; // var aciklama = // "Bu Seçenekte İse Hesabınızda, Hedefler Belirleyip Takip Edebilir, Hedef Takibi İle İlgili Bir Çok Özelliği Aktif Edebilirsiniz."; return Container( padding: EdgeInsets.all(0), child: Column( children: [ ListTileTheme( contentPadding: EdgeInsets.all(5), dense: true, horizontalTitleGap: 0, minVerticalPadding: 0, child: ListTile( leading: Text(emoji, style: TextStyle(fontSize: 24)), title: FikoYTButton( text: baslik, tema: FikoYTButtonTheme( textColor: Theme.of(context).extension()?.infoTextColor, fontSize: 14, textShadow: [], ), ), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ FikoYTButton( text: aciklama, tema: FikoYTButtonTheme(fontWeight: FontWeight.normal, fontSize: 10, textShadow: []), ), Align( alignment: Alignment.centerRight, child: SizedBox( height: 25, child: FittedBox( fit: BoxFit.fill, child: Obx(() { widget.kyt.value; return Switch( value: veriSeti ?? false, onChanged: (value) { // veriSeti = value; // widget.kyt.refresh(); veriSetiDegisti(value); }, ); }), ), ), ), ], ), dense: true, isThreeLine: true, onTap: () { veriSetiDegisti(!(veriSeti ?? false)); }, ), ), Divider(height: 1, thickness: 1), ], ), ); } kaydet() { if (widget.kyt.value.bosMu) { /// Boş toastification.show( context: FikoYTCoreService.navigatorKey.currentContext, type: ToastificationType.error, style: ToastificationStyle.fillColored, // title: Text("FikoYT Sistem"), description: Text("Tüm Boş Alanları Doldurun."), alignment: Alignment.topRight, autoCloseDuration: const Duration(seconds: 4), borderRadius: BorderRadius.circular(4.0), // boxShadow: lowModeShadow, showProgressBar: false, dragToClose: true, applyBlurEffect: true, ); return; } logic?.kaydet(kyt: widget.kyt.value); /// Başarılı toastification.show( context: FikoYTCoreService.navigatorKey.currentContext, type: ToastificationType.success, style: ToastificationStyle.fillColored, // title: Text("FikoYT Sistem"), description: Text("Hesap Türü Tanımlandı."), alignment: Alignment.topRight, autoCloseDuration: const Duration(seconds: 4), borderRadius: BorderRadius.circular(4.0), // boxShadow: lowModeShadow, showProgressBar: false, dragToClose: true, applyBlurEffect: true, ); } FikoYTCard formParaBirimiListesi(BuildContext context) { return FikoYTCard( key: ValueKey("ParaBirimiListesiDialog"), theme: (Theme.of(context).extension() ?? FikoYTCardTheme()).copyWith( boxConstraints: BoxConstraints(maxWidth: 300), backgroundColor: Theme.of(context).extension()?.backgroundColor, ), children: [ Center(child: Text('💸', style: TextStyle(fontSize: 54))), Center( child: FikoYTButton( text: 'Para Birimi 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, ), ), ), Divider(height: 4), 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), /// 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: (logicHesaplar?.logicParaBirimi?.listeAlSync(0, 1000) ?? []).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: Colors.transparent, 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: "Para Birimi Yok", tema: Theme.of(context).extension()?.copyWith( textColor: Theme.of(context).extension()?.errorTextColor, textStrokeColor: Colors.white, fontSize: 16, ), ), /** */ ], ), ) : FutureBuilder( future: logicHesaplar?.logicParaBirimi?.listeAl(0, 1000), builder: (context, snapshot) { return Column( children: [ if (snapshot.data != null) if (snapshot.data!.isNotEmpty) Material( color: Colors.transparent, child: ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: snapshot.data?.length, itemBuilder: (context, index) { return paraBirimiItem(snapshot.data![index], index, context); // FikoYTButton( // text: // "${snapshot[index].kod} ${snapshot[index].ismi} ${snapshot[index].sembol} -> ${snapshot[index].oran}", // ); }, ), ), /** */ ], ); }, ), ), /// Row( children: [ 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(); }, ), Spacer(), ], ), ], ), ), ], ); } Container paraBirimiItem(ParaBirimi prbrm, int index, BuildContext context) { return 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: "${prbrm.sembol}"), title: FikoYTButton(text: "${prbrm.ismi} ${prbrm.kod}"), trailing: FikoYTButton(text: "${prbrm.oran}"), tileColor: Theme.of(context).extension()?.cardBackgroundColor, isThreeLine: false, onTap: () { Navigator.of(context).pop(prbrm); }, subtitle: FikoYTButton( text: prbrm.aciklama ?? 'Açıklama Yok', tema: FikoYTButtonTheme(fontWeight: FontWeight.w200, fontSize: 12), ), ), ), ); } }