// ignore_for_file: library_private_types_in_public_api import 'package:fikoyt_finans/apps/mesaici/model/calisma_kayit/calisma_kayit.dart'; import 'package:fikoyt_finans/apps/mesaici/model/model_hareketler.dart'; import 'package:fikoyt_finans/apps/mesaici/pages/hareketler/veri_ekleyicisi/veri_ekleyicisi.dart'; import 'package:fikoyt_finans/apps/mesaici/widgets/ozet_aylik/ozet_aylik.dart'; import 'package:fikoyt_finans/core/fikoyt.service.dart'; import 'package:fikoyt_finans/core/widgets/fiko_ui/fiko_button/fiko_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:get/get.dart'; import 'package:vrouter/vrouter.dart'; import 'package:fikoyt_finans/core/Extensions/fiko_tarih.dart'; import 'package:fikoyt_finans/core/Extensions/fiko_duration_ext.dart'; import '../../../../core/widgets/base_page/base_page_view.dart'; import '../../../../core/widgets/draggable_home.dart'; import '../../../../core/widgets/fikoyt_elastic/fikoyt_elastic.dart'; import '../../base_page_mesaici_view.dart'; import '../../widgets/kullanici_bilgi_navigasyon/kullanici_bilgi_navigasyon.dart'; import '../../widgets/uygulama_baslik/uygulama_baslik.dart'; class PageMesaiciHareketlerLogic extends GetxController { // final FikoYTMesaiciService FikoYTService.servisMesaici = Get.put(FikoYTMesaiciService()); RxBool gosterVeriEkleyici = false.obs; /** */ // Rx aktifAy = DateTime.now().obs; // sonrakiAy() { // aktifAy.value = DateTime(aktifAy.value.year, aktifAy.value.month + 1); // aktifAy.refresh(); // } // oncekiAy() { // aktifAy.value = DateTime(aktifAy.value.year, aktifAy.value.month - 1); // aktifAy.refresh(); // } /** */ // RxList liste = [].obs; // late StreamSubscription> listeWatch; // RxString listeTuru = "liste".obs; /** */ // Stream> liste = [] as Stream>; // @override // void onInit() { // // TODO: implement onInit // liste = FikoYTService.servisMesaici.isar?.modelHareketlers.where().sortByTarih().watch(); // super.onInit(); // } /** */ @override void onInit() { // TODO: implement onInit // alHareketler(); // listeWatch = FikoYTService.servisMesaici.isar?.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).sortByTarih().watch().listen( // (data) { // liste.value = data; // liste.refresh(); // }, // ); // aktifAy.listen( // (p0) { // print("${aktifAy.value.ayinIlkGunu()}, ${aktifAy.value.ayinSonGunu()}"); // }, // ); super.onInit(); } @override void onClose() { // TODO: implement onClose // if (listeWatch.isPaused != true) listeWatch.cancel(); super.onClose(); } // Future?> alHareketler() async { // liste = (FikoYTService.servisMesaici.isar?.modelHareketlers.where().sortByTarih().findAllSync()).obs; // return liste; // } // List alHareketlerSync() { // return (FikoYTService.servisMesaici.isar?.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(aktifAy.value.ayinIlkGunu(), aktifAy.value.ayinSonGunu())).sortByTarihDesc().findAllSync()); // } // Future> alHareketler() async { // return (FikoYTService.servisMesaici.isar?.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(aktifAy.value.ayinIlkGunu(), aktifAy.value.ayinSonGunu())).sortByTarihDesc().findAll()); // } // Stream> dinleHareketler() async* { // yield* FikoYTService.servisMesaici.isar?.modelHareketlers.where().filter().turuEqualTo(KartTuru.CALISMA_KARTI).calismaKarti((q) => q.tarihBetween(aktifAy.value.ayinIlkGunu(), aktifAy.value.ayinSonGunu())).sortByTarihDesc().watch(); // } } class PageMesaiciHareketler extends StatefulWidget { const PageMesaiciHareketler({super.key}); @override _PageMesaiciHareketlerState createState() => _PageMesaiciHareketlerState(); } class _PageMesaiciHareketlerState extends State { PageMesaiciHareketlerLogic logic = Get.put(PageMesaiciHareketlerLogic()); BasePageLogic basePageLogic = Get.put(BasePageLogic()); BasePageMesaiciLogic basePageMesaiciLogic = Get.put(BasePageMesaiciLogic()); //---> // final GlobalKey globalKeysAktifGun = GlobalKey(); // final scrollController = ScrollController(); @override void initState() { super.initState(); // WidgetsBinding.instance.addPostFrameCallback((_) async { // await Future.delayed(const Duration(milliseconds: 1000)); // RenderObject? aktifAyObject = globalKeysAktifGun.currentContext?.findRenderObject(); // // print(globalKeysAktifAy); // if (aktifAyObject != null) { // basePageLogic.scrollController.position.ensureVisible( // aktifAyObject, // alignment: 0.1, // How far into view the item should be scrolled (between 0 and 1). // duration: const Duration(seconds: 1), // ); // } // }); } @override void dispose() { Get.delete(); // scrollController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { SchedulerBinding.instance.addPostFrameCallback((_) { basePageLogic.subTitle.value = "📱 Hareketler"; // print(context.vRouter.pathParameters["ay"]); }); ScreenSizeTypes screenType = FikoYTElastic.getScreenSizeType(context); [ // ScreenSizeTypes.small, ScreenSizeTypes.mini, ScreenSizeTypes.extraMini ].contains(screenType); return DraggableHome( scrollController: basePageLogic.scrollController, leading: const UygulamaBaslikSol(), title: UygulamaBaslikOrta(), actions: const [ UygulamaBaslikSag(), ], headerWidget: PageView( children: [ Container( color: Colors.transparent, //Colors.orange, height: 300 - kToolbarHeight - 10, margin: const EdgeInsets.only(top: kToolbarHeight, bottom: 10, right: 10, left: 10), child: KullaniciBilgiNavigasyon( simge: const Text( "📱", style: TextStyle( fontSize: 54, ), ), ), ), ], ), bodyColor: Colors.transparent, body: [ Row( children: [ FikoButton1( text: "<", textSize: 16, edgePadding: const EdgeInsets.symmetric(horizontal: 5), onPressed: () { FikoYTService.servisMesaici.oncekiAy(); FikoYTService.servisMesaici.aktifAy.refresh(); }, ), Expanded( child: Obx( () => AnimatedFikoButton1( text: (DateTime.now().formatla("MMMM yyyy") == FikoYTService.servisMesaici.aktifAy.value.formatla("MMMM yyyy") ? "👉🏻" : "") + FikoYTService.servisMesaici.aktifAy.value.formatla('MMMM yyyy'), textSize: 16, onPressed: () { FikoYTService.servisMesaici.simdikiAy(); FikoYTService.servisMesaici.aktifAy.refresh(); }, ), // AnimatedSwitcher( // duration: const Duration(milliseconds: 750), // transitionBuilder: (Widget child, Animation animation) { // return FadeTransition(opacity: animation, child: child); // }, // child: FikoButton1( // key: ValueKey(FikoYTService.servisMesaici.aktifAy.value.formatla('MMMM yyyy')), // text: (DateTime.now().formatla("MMMM yyyy") == FikoYTService.servisMesaici.aktifAy.value.formatla("MMMM yyyy") ? "👉🏻" : "") + FikoYTService.servisMesaici.aktifAy.value.formatla('MMMM yyyy'), // textSize: 16, // onPressed: () { // FikoYTService.servisMesaici.simdikiAy(); // FikoYTService.servisMesaici.aktifAy.refresh(); // }, // ), // ), ), ), FikoButton1( text: ">", textSize: 16, edgePadding: const EdgeInsets.symmetric(horizontal: 5), onPressed: () { FikoYTService.servisMesaici.sonrakiAy(); FikoYTService.servisMesaici.aktifAy.refresh(); }, ), ], ), Container( padding: const EdgeInsets.symmetric(horizontal: 10), child: Column( children: [ OzetAylik(), Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ FikoButton1( text: "⏳ Veri Ekleyicisi", textSize: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), backColor: Colors.white, textColor: Colors.black, textStrokeColor: Colors.transparent, borderColor: Colors.blue, onPressed: () async { logic.gosterVeriEkleyici.toggle(); }, ), /** */ ], ), /** */ Obx( () => AnimatedSwitcher( duration: const Duration(milliseconds: 500), transitionBuilder: (Widget child, Animation animation) { return SizeTransition( sizeFactor: animation, child: FadeTransition(opacity: animation, child: child), ); }, child: logic.gosterVeriEkleyici.value ? VeriEkleyicisi() : null, ), ), /** */ Obx( () { FikoYTService.servisMesaici.aktifAy.value; return FutureBuilder( future: FikoYTService.servisMesaici.alHareketler(), builder: (context, snapshot) { if (snapshot.hasData) { final gunler = snapshot.data; // if (todos!.isNotEmpty) { return AnimatedSwitcher( duration: const Duration(milliseconds: 750), transitionBuilder: (Widget child, Animation animation) { return FadeTransition( opacity: animation, child: SizeTransition( sizeFactor: animation, axisAlignment: 2, // fixedCrossAxisSizeFactor: 1, axis: Axis.vertical, child: child, ), ); }, child: AnimatedCrossFade( key: ValueKey(FikoYTService.servisMesaici.aktifAy.value.formatla("MMMM yyyy")), duration: const Duration(milliseconds: 300), crossFadeState: gunler!.isNotEmpty ? CrossFadeState.showFirst : CrossFadeState.showSecond, firstChild: ListView.separated( padding: const EdgeInsets.symmetric(vertical: 10.0), physics: const BouncingScrollPhysics(), shrinkWrap: true, itemCount: gunler.length, separatorBuilder: (context, index) => const SizedBox( height: 5, ), itemBuilder: (context, index) { final gun = gunler[index]; return Dismissible( direction: DismissDirection.endToStart, // this will only allow slide to left. dismissThresholds: const {DismissDirection.endToStart: 0.4}, key: UniqueKey(), background: Row( children: [ const Spacer(), FikoButton1( text: const Icon( Icons.delete, color: Colors.red, size: 14, ), ), ], ), confirmDismiss: (direction) async { return true; }, onDismissed: (direction) async { gunler.removeAt(index); await FikoYTService.servisMesaici.isar?.writeTxn( () async { await FikoYTService.servisMesaici.isar?.modelHareketlers.delete(gun.id); }, ); FikoYTService.servisMesaici.aktifAy.refresh(); }, child: FikoButton1( backColor: DateTime.now().formatla("dd.MM.yyyy EEEE") == gun.calismaKarti?.tarih!.formatla("dd.MM.yyyy EEEE") ? Colors.blue.shade200 : gun.calismaKarti?.gunTuru == GunTuru.HAFTA_TATILI ? Colors.yellowAccent : gun.calismaKarti?.gunTuru == GunTuru.DINLENME_GUNU ? Colors.yellowAccent : Colors.white, borderColor: Colors.black12, edgePadding: const EdgeInsets.symmetric(vertical: 2, horizontal: 5), text: Row( children: [ if (DateTime.now().formatla("dd.MM.yyyy EEEE") == gun.calismaKarti?.tarih!.formatla("dd.MM.yyyy EEEE")) const Text( "👉🏻", ), const Text("📅"), Text( // key: DateTime.now().formatla("dd.MM.yyyy EEEE") == gun.tarih!.formatla("dd.MM.yyyy EEEE") ? globalKeysAktifGun : null, gun.calismaKarti?.tarih?.formatla("dd.MM.yyyy EEEE") ?? "Tarih Seç", ), const Spacer(), // FikoButton1( // text: todo.calismaKarti?.normalMesai?.insanizeSure() ?? "Yok", // textColor: Colors.black, // textStrokeColor: Colors.transparent, // ), // FikoButton1(text: "+"), // FikoButton1( // text: todo.calismaKarti?.fazlaMesai?.insanizeSure() ?? "Yok", // textColor: Colors.black, // textStrokeColor: Colors.transparent, // ), // FikoButton1(text: "="), FikoButton1( text: gun.calismaKarti?.calisilanSure?.insanize ?? "Yok", textColor: Colors.black, textStrokeColor: Colors.transparent, ), ], ), onPressed: () { context.vRouter.to("/mesaici/hareketler/gun-hareketleri/${gun.id}"); }, ), ); }, ), secondChild: Padding( padding: const EdgeInsets.only(top: 30.0), child: Stack( children: [ Card( child: Container( height: 100.0, ), ), const FractionalTranslation( translation: Offset(0.0, -0.4), child: Align( alignment: FractionalOffset(0.5, 0.0), child: CircleAvatar( // backgroundColor: Colors.redAccent.shade200, radius: 25.0, child: Text( "📱", style: TextStyle(fontSize: 24), ), ), ), ), Padding( padding: const EdgeInsets.only(top: 48), child: Align( alignment: const FractionalOffset(0.5, 0.5), child: Text( "Herhangi Bir Çalışma Kaydınız Bulunamadı", style: TextStyle(fontSize: 16, fontWeight: FontWeight.w300, color: Colors.blueAccent.shade400), textAlign: TextAlign.center, ), ), ), ], ), ), ), ); } return const CircularProgressIndicator(); }, ); }, ), /** */ const Divider(), Obx( () { FikoYTService.servisMesaici.aktifAy.value; return FutureBuilder( future: FikoYTService.servisMesaici.aylikOzet?.aktifAyhesapla(), builder: (context, snapshot) => Column( children: [ Row( children: [ const Text( "Normal Mesai", style: TextStyle(fontWeight: FontWeight.bold), ), const Spacer(), AnimatedFikoButton1( text: "${snapshot.data?.normalCalismaSuresi.insanize ?? 'Yok'}", textAlign: TextAlign.right, // onPressed: () { // print(snapshot.error.toString()); // }, ), ], ), Row( children: [ const Text( "Fazla Mesai", style: TextStyle(fontWeight: FontWeight.bold), ), const Spacer(), AnimatedFikoButton1( text: "${snapshot.data?.fazlaMesaiSuresi.insanize ?? 'Yok'}", textAlign: TextAlign.right, ), ], ), Row( children: [ const Text( "Toplam Saat", style: TextStyle(fontWeight: FontWeight.bold), ), const Spacer(), AnimatedFikoButton1( text: "${snapshot.data?.toplamMesaiSuresi.insanize ?? 'Yok'}", textAlign: TextAlign.right, ), ], ), ], ), ); }, ), ], ), ), ], headerExpandedHeight: 315, // stretchMaxHeight: 100, fullyStretchable: false, backgroundColor: Colors.grey.shade200, centerTitle: true, alwaysShowLeadingAndAction: true, appBarColor: Colors.blue.shade500, alwaysShowTitle: true, curvedBodyRadius: 0, onStretchTrigger: () async { context.vRouter.to("/"); }, ); } }