import 'dart:convert'; import 'dart:io'; import 'package:fikoyt_mesaici/apps/mesaici/base_page_mesaici_view.dart'; import 'package:fikoyt_mesaici/apps/mesaici/model/ayarlar/model_ayarlar.dart'; import 'package:fikoyt_mesaici/apps/mesaici/model/calisma_kayit/calisma_kayit.dart'; import 'package:fikoyt_mesaici/apps/mesaici/pages/ayarlar/calisma_sureleri/mola_dialog.dart'; import 'package:fikoyt_mesaici/apps/mesaici/pages/ayarlar/calisma_sureleri/molalar_list_view.dart'; import 'package:fikoyt_mesaici/core/Extensions/fiko_duration_ext.dart'; import 'package:fikoyt_mesaici/core/Extensions/fiko_tarih.dart'; import 'package:fikoyt_mesaici/core/fikoyt.service.dart'; import 'package:fikoyt_mesaici/core/interface/fiko_dialog_ayarlari.dart'; import 'package:fikoyt_mesaici/core/widgets/yazi_kutulari/yazi_kutulari.dart'; import 'package:fikoyt_ui/ui/ui.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_animate/flutter_animate.dart'; import 'package:get/get.dart'; import 'package:getwidget/getwidget.dart'; import 'ek_odemeler.dart'; import 'kesintiler_widget.dart'; import 'vardiye_ekle_dialog.dart'; import 'vergiler_widget.dart'; class VardiyalarWidget extends StatelessWidget { VardiyalarWidget({super.key}); BasePageMesaiciLogic basePageMesaiciLogic = Get.put(BasePageMesaiciLogic()); // final FikoYTMesaiciService FikoYTService.servisMesaici = Get.put(FikoYTMesaiciService()); final FikoYTService servisFikoYT = FikoYTService(); @override Widget build(BuildContext context) { return Obx( () => Column( children: [ /** */ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Expanded( child: Divider( indent: 20.0, endIndent: 10.0, thickness: 1, ), ), FikoButton( text: FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].ismi ?? 'İsimsiz Vardiya', tema: FikoButtonTema( yaziSinirRengi: Colors.transparent, yaziRengi: Theme.of(context).extension()?.yaziRengi, ), onPressed: () { FikoYTService.dialogGoster( context, SizedBox( width: 250, child: VardiyaEkleDialog( vardiya: FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0], ), ), FikoDialogAyarlari( baslik: "Vardiya Düzenle", altButonlar: [ FikoButton( text: "Sil", tema: FikoButtonTema( yaziRengi: Colors.red, yaziSinirRengi: Colors.transparent, ), onPressed: () { List? list = FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.toList(); list.remove(FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0]); FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar = list; if (FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.isEmpty) { FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar = [Vardiya(ismi: "Sürekli Gündüz", aciklama: "Sürekli Gündüz Vardiyası")]; FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya = 0; } if (FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya! > FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.length - 1) FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya = FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.length - 1; FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }, ), const Spacer(), FikoButton( text: "Kapat", tema: FikoButtonTema( yaziRengi: Colors.green, yaziSinirRengi: Colors.transparent, ), onPressed: (() { FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }), ), ], ), ); }, ), const Expanded( child: Divider( indent: 10.0, endIndent: 20.0, thickness: 1, ), ), SizedBox( width: 33, child: MaterialButton( elevation: 0, minWidth: 0, shape: CircleBorder( // borderRadius: // const BorderRadius.all( // Radius.circular(5)), side: BorderSide(width: 1, color: Colors.blue.withOpacity(0.5), style: BorderStyle.solid), ), padding: const EdgeInsets.all(0), // color: Colors.white, onPressed: () async { Vardiya vrd = Vardiya(); FikoYTService.dialogGoster( context, SizedBox( width: 250, // height: 300, child: VardiyaEkleDialog( vardiya: vrd, ), ), FikoDialogAyarlari(baslik: "Vardiya Ekle", baslikSimge: "➕", altButonlar: [ FikoButton( text: "Ekle", tema: FikoButtonTema( yaziRengi: Colors.green, yaziSinirRengi: Colors.transparent, ), onPressed: (() { List vrdylr = FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.toList(); vrdylr.add(vrd); FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar = vrdylr; FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya = vrdylr.length - 1; FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }), ), const Spacer(), FikoButton( text: "Kapat", tema: FikoButtonTema( yaziRengi: Colors.red, yaziSinirRengi: Colors.transparent, ), onPressed: (() { Navigator.pop( context, ); }), ), ]), ); }, child: const Text("➕"), // const Icon(Icons.notifications, // color: Colors.lightBlue, size: 14), ), ), ], ), const SizedBox( height: 10, ), /** */ if (FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.isEmpty) Padding( padding: const EdgeInsets.only(top: 30.0), child: Stack( children: [ Card( child: Container( height: 100.0, ), ), FractionalTranslation( translation: const Offset(0.0, -0.4), child: Align( alignment: const FractionalOffset(0.5, 0.0), child: CircleAvatar( // backgroundColor: Colors.redAccent.shade200, radius: 25.0, child: Image.asset( 'assets/mesaici/ayarlar/vardiya.png', // width: 300, width: 42, height: 42, fit: BoxFit.contain, ), ), ), ), Padding( padding: const EdgeInsets.only(top: 48), child: Align( alignment: const FractionalOffset(0.5, 0.5), child: Text( "Henüz Vardiya Kaydı Girilmemiş", style: TextStyle(fontSize: 16, fontWeight: FontWeight.w300, color: Colors.blueAccent.shade400), textAlign: TextAlign.center, ), ), ), ], ), ) else // for (var vrd in FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar) Column( children: [ SizedBox( height: 22, child: ShaderMask( shaderCallback: (Rect rect) { return const LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: [Colors.purple, Colors.transparent, Colors.transparent, Colors.purple], stops: [0.0, 0.1, 0.9, 1.0], // 10% purple, 80% transparent, 10% purple ).createShader(rect); }, blendMode: BlendMode.dstOut, child: ListView( shrinkWrap: true, physics: const BouncingScrollPhysics(), scrollDirection: Axis.horizontal, // your ListView children: [ for (var i = 0; i < FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.length; i++) Obx( () { Vardiya vrd = FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[i]; return Padding( padding: const EdgeInsets.symmetric( horizontal: 4, ), child: FikoButton( text: vrd.ismi ?? "İsim Verilmemiş", tema: FikoButtonTema( arkaRenk: FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya == i ? Colors.blue.withOpacity(0.7) : Colors.black.withOpacity(0.2), edgePadding: const EdgeInsets.symmetric(vertical: 2, horizontal: 5), ), onLongPress: () { FikoYTService.dialogGoster( context, SizedBox( width: 250, child: VardiyaEkleDialog( vardiya: vrd, ), ), FikoDialogAyarlari(baslik: "Vardiya Düzenle", altButonlar: [ FikoButton( text: "Sil", tema: FikoButtonTema( yaziRengi: Colors.red, yaziSinirRengi: Colors.transparent, ), onPressed: () { List? list0 = FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.toList(); list0.removeAt(i); FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar = list0; if (FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.isEmpty) { FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar = [Vardiya(ismi: "Sürekli Gündüz", aciklama: "Sürekli Gündüz Vardiyası")]; FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya = 0; } if (FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya! > FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.length - 1) FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya = FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar.length - 1; FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }, ), const Spacer(), FikoButton( text: "Kapat", tema: FikoButtonTema( yaziRengi: Colors.green, yaziSinirRengi: Colors.transparent, ), onPressed: (() { FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }), ), ]), ); }, onPressed: () { FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya = i; FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, ), ).animate( effects: [const FadeEffect(), ShimmerEffect(delay: 1000.ms)], ); }, ), ], ), ), ), ], ), /** */ AnimatedSwitcher( duration: const Duration(milliseconds: 500), transitionBuilder: (Widget child, Animation animation) { return ScaleTransition(scale: animation, child: child); }, child: Column( key: ValueKey(FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya), children: [ for (var i = 0; i < FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].gunAyarlari.toListe().length; i++) Obx( () { GunAyari gun = FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].gunAyarlari.toListe()[i]; final Rx kayit = gun.obs; kayit.value.molalarScrollController = ScrollController(); kayit.listen( (gn) { gun = gn; }, ); return GFAccordion( title: '🗓️ ${kayit.value.ismi} Günü Ayarları', // onToggleCollapsed: (p0) { // print(p0); // if (!p0) gunObs.value.molalarScrollController?.dispose(); // }, contentChild: Column( children: [ Padding( padding: const EdgeInsets.all(5), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( child: Obx( () => TextButton( onPressed: () { kayit.value.turu = GunTuru.CALISMA_GUNU; FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, style: TextButton.styleFrom( alignment: Alignment.center, fixedSize: const Size.fromHeight(20), backgroundColor: kayit.value.turu == GunTuru.CALISMA_GUNU ? Colors.teal : Colors.grey.shade200, shape: const BeveledRectangleBorder(borderRadius: BorderRadius.zero), foregroundColor: kayit.value.turu == GunTuru.CALISMA_GUNU ? Colors.white : Colors.teal, textStyle: const TextStyle( fontSize: 10, fontWeight: FontWeight.bold, ), ), child: const Text('Çalışma Günü'), ), ), ), Expanded( child: Obx( () => TextButton( onPressed: () { kayit.value.turu = GunTuru.DINLENME_GUNU; FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, style: TextButton.styleFrom( alignment: Alignment.center, fixedSize: const Size.fromHeight(20), backgroundColor: kayit.value.turu == GunTuru.DINLENME_GUNU ? Colors.teal : Colors.grey.shade200, shape: const BeveledRectangleBorder(borderRadius: BorderRadius.zero), foregroundColor: kayit.value.turu == GunTuru.DINLENME_GUNU ? Colors.white : Colors.teal, textStyle: const TextStyle( fontSize: 10, fontWeight: FontWeight.bold, ), ), child: const Text('Dinlenme Günü'), ), ), ), Expanded( child: Obx( () => TextButton( onPressed: () { kayit.value.turu = GunTuru.HAFTA_TATILI; FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, style: TextButton.styleFrom( alignment: Alignment.center, fixedSize: const Size.fromHeight(20), backgroundColor: kayit.value.turu == GunTuru.HAFTA_TATILI ? Colors.teal : Colors.grey.shade200, shape: const BeveledRectangleBorder(borderRadius: BorderRadius.zero), foregroundColor: kayit.value.turu == GunTuru.HAFTA_TATILI ? Colors.white : Colors.teal, textStyle: const TextStyle( fontSize: 10, fontWeight: FontWeight.bold, ), ), child: const Text('Hafta Tatili'), ), ), ), ], ), ), const SizedBox( height: 5, ), Padding( padding: const EdgeInsets.all(5), child: Column( children: [ Row( children: [ Expanded( child: Container( alignment: Alignment.center, decoration: BoxDecoration( color: Colors.grey.shade200, borderRadius: const BorderRadius.only( bottomLeft: Radius.circular(10), topLeft: Radius.circular(10), ), ), child: const Text( "Giriş Saati", style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold), ), ), ), Expanded( child: Container( alignment: Alignment.center, decoration: BoxDecoration( color: Colors.grey.shade200, borderRadius: const BorderRadius.only( bottomRight: Radius.circular(10), topRight: Radius.circular(10), ), ), child: const Text( "Çıkış Saati", style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold), ), ), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( child: FikoButton( text: kayit.value.girisSaati?.formatla('HH:mm:ss') ?? 'Yok', tema: FikoButtonTema( boyutYaziSinir: 2, boyutYazi: 16, yaziRengi: Colors.red, yaziSinirRengi: Colors.amber, ), onPressed: () async { DateTime? rslt = await FikoYTService.saatSec(context, varsayilanTarih: DateTime(0, 0, 0, 0, 0, 0, 0, 0).ayarlaGununSaati(kayit.value.girisSaati?.gununSaati() ?? DateTime(0, 0, 0, 0, 0, 0, 0, 0).gununSaati())); if (rslt == null) return; kayit.value.girisSaati = rslt; // gunObs.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); // showTimePicker( // context: context, // initialTime: gun!.value.girisSaati.value) // .then((value) { // if (value != null) { // gun!.value.girisSaati.value = value; // } // }); }, ), ), Expanded( child: FikoButton( text: kayit.value.cikisSaati?.formatla('HH:mm:ss') ?? 'Yok', tema: FikoButtonTema( boyutYaziSinir: 2, boyutYazi: 16, yaziRengi: Colors.green, yaziSinirRengi: Colors.tealAccent, ), onPressed: () async { DateTime? rslt = await FikoYTService.saatSec(context, varsayilanTarih: DateTime(0, 0, 0, 0, 0, 0, 0, 0).ayarlaGununSaati(kayit.value.cikisSaati?.gununSaati() ?? DateTime(0, 0, 0, 0, 0, 0, 0, 0).gununSaati())); if (rslt == null) return; kayit.value.cikisSaati = rslt; // gunObs.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); // showTimePicker( // context: context, // initialTime: gun!.value.cikisSaati.value) // .then((value) { // if (value != null) { // gun!.value.cikisSaati.value = value; // } // }); }, ), ), ], ), Row( children: [ Expanded( child: Container( alignment: Alignment.center, decoration: BoxDecoration( color: Colors.grey.shade200, borderRadius: const BorderRadius.only( bottomLeft: Radius.circular(10), topLeft: Radius.circular(10), ), ), child: const Text( "Giriş Toleransı", style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold), ), ), ), Expanded( child: Container( alignment: Alignment.center, decoration: BoxDecoration( color: Colors.grey.shade200, borderRadius: const BorderRadius.only( bottomRight: Radius.circular(10), topRight: Radius.circular(10), ), ), child: const Text( "Çıkış Toleransı", style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold), ), ), ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( child: FikoButton( text: "${kayit.value.girisToleransi?.insanize ?? 'Yok'}", tema: FikoButtonTema( boyutYaziSinir: 2, boyutYazi: 16, ), onPressed: () async { kayit.value.girisToleransi = await (kayit.value.girisToleransi ?? const Duration(microseconds: 0)).sureSec(context, ayarlar: FikoDialogAyarlari(baslik: "Giriş Toleransı Seçiniz", icerik: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ FikoButton( text: "⏳ 5 Dk", tema: FikoButtonTema( boyutYazi: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), yaziRengi: Theme.of(context).extension()?.yaziRengi, yaziSinirRengi: Colors.transparent, sinirRengi: Colors.blue, ), onPressed: () { kayit.value.girisToleransi = const Duration(minutes: 5); kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop(context, kayit.value.girisToleransi); }, ), const SizedBox( width: 5, ), FikoButton( text: "⏳ 10 Dk", tema: FikoButtonTema( boyutYazi: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), yaziRengi: Theme.of(context).extension()?.yaziRengi, yaziSinirRengi: Colors.transparent, sinirRengi: Colors.blue, ), onPressed: () { kayit.value.girisToleransi = const Duration(minutes: 10); kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop(context, kayit.value.girisToleransi); }, ), const SizedBox( width: 5, ), FikoButton( text: "⏳ 15 Dk", tema: FikoButtonTema( boyutYazi: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), yaziRengi: Theme.of(context).extension()?.yaziRengi, yaziSinirRengi: Colors.transparent, sinirRengi: Colors.blue, ), onPressed: () { kayit.value.girisToleransi = const Duration(minutes: 15); kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop(context, kayit.value.girisToleransi); }, ), ], ), ])); FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, ), ), Expanded( child: FikoButton( text: "${kayit.value.cikisToleransi?.insanize ?? 'Yok'}", tema: FikoButtonTema( boyutYaziSinir: 2, boyutYazi: 16, ), onPressed: () async { kayit.value.cikisToleransi = await (kayit.value.cikisToleransi ?? const Duration(microseconds: 0)).sureSec(context, ayarlar: FikoDialogAyarlari(baslik: "Giriş Toleransı Seçiniz", icerik: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ FikoButton( text: "⏳ 5 Dk", tema: FikoButtonTema( boyutYazi: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), yaziRengi: Theme.of(context).extension()?.yaziRengi, yaziSinirRengi: Colors.transparent, sinirRengi: Colors.blue, ), onPressed: () { kayit.value.cikisToleransi = const Duration(minutes: 5); kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop(context, kayit.value.cikisToleransi); }, ), const SizedBox( width: 5, ), FikoButton( text: "⏳ 10 Dk", tema: FikoButtonTema( boyutYazi: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), yaziRengi: Theme.of(context).extension()?.yaziRengi, yaziSinirRengi: Colors.transparent, sinirRengi: Colors.blue, ), onPressed: () { kayit.value.cikisToleransi = const Duration(minutes: 10); kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop(context, kayit.value.cikisToleransi); }, ), const SizedBox( width: 5, ), FikoButton( text: "⏳ 15 Dk", tema: FikoButtonTema( boyutYazi: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), yaziRengi: Theme.of(context).extension()?.yaziRengi, yaziSinirRengi: Colors.transparent, sinirRengi: Colors.blue, ), onPressed: () { kayit.value.cikisToleransi = const Duration(minutes: 15); kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop(context, kayit.value.cikisToleransi); }, ), ], ), ])); FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, ), ), ], ), ListTile( dense: true, subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( 'Çalışma Süresi', style: TextStyle( fontWeight: FontWeight.bold, ), ), Obx( () => FikoButton1( text: "${kayit.value.calismaSuresi?.insanizeEk() ?? 'Yok'}", textStrokeWidth: 2, textSize: 16, textColor: Colors.red, textStrokeColor: Colors.yellow, onPressed: () async { await (kayit.value.calismaSuresi ?? const Duration(microseconds: 0)) .sureSec( context, ayarlar: FikoDialogAyarlari( baslik: "Çalışma Süresini Seçiniz", icerik: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ FikoButton1( text: "⏳ 11 Saat", textSize: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), textColor: Colors.black, textStrokeColor: Colors.transparent, borderColor: Colors.blue, onPressed: () { kayit.value.calismaSuresi = const Duration(hours: 11); // gunObs.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop(context, kayit.value.calismaSuresi); }, ), const SizedBox( width: 5, ), FikoButton1( text: "⏳ 9 Saat", textSize: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), textColor: Colors.black, textStrokeColor: Colors.transparent, borderColor: Colors.blue, onPressed: () { kayit.value.calismaSuresi = const Duration(hours: 9); // gunObs.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop(context, kayit.value.calismaSuresi); }, ), const SizedBox( width: 5, ), FikoButton1( text: "⏳ 7,5 Saat", textSize: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), textColor: Colors.black, textStrokeColor: Colors.transparent, borderColor: Colors.blue, onPressed: () { kayit.value.calismaSuresi = const Duration(hours: 7, minutes: 30); // gunObs.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop(context, kayit.value.calismaSuresi); }, ), ], ), ], ), ) .then( (value) { if (value != null) { kayit.value.calismaSuresi = value; FikoYTService.servisMesaici.ayarlarModel!.refresh(); } }, ); }, ), ), ], ), // trailing: const Icon(Icons.chevron_right_sharp), isThreeLine: true, splashColor: Colors.grey.shade300, onTap: () {}, ), ListTile( dense: true, subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Expanded( child: Divider( indent: 20.0, endIndent: 10.0, thickness: 1, ), ), Text( 'Molalar (${kayit.value.molalar?.toplamMola.insanize ?? 'Yok'})', style: const TextStyle( fontWeight: FontWeight.bold, ), ), const Expanded( child: Divider( indent: 10.0, endIndent: 20.0, thickness: 1, ), ), SizedBox( width: 33, child: MaterialButton( elevation: 0, minWidth: 0, shape: CircleBorder( // borderRadius: // const BorderRadius.all( // Radius.circular(5)), side: BorderSide(width: 1, color: Colors.blue.withOpacity(0.5), style: BorderStyle.solid), ), padding: const EdgeInsets.all(0), // color: Colors.white, onPressed: () async { Rx ml = Mola().obs; FikoYTService.dialogGoster( context, SizedBox( width: 250, // height: 300, child: MolaDialog( mola: ml, ), ), FikoDialogAyarlari(baslik: "Mola Ekle", baslikSimge: "➕", altButonlar: [ FikoButton1( textColor: Colors.green, textStrokeColor: Colors.transparent, text: "Ekle", onPressed: (() { List? list0 = kayit.value.molalar?.toList(); list0?.add(ml.value); kayit.value.molalar = list0; kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); WidgetsBinding.instance.addPostFrameCallback((_) async { await Future.delayed(const Duration(milliseconds: 1000)); if (kayit.value.molalarScrollController!.hasClients) { kayit.value.molalarScrollController?.animateTo( kayit.value.molalarScrollController!.position.maxScrollExtent, duration: const Duration(milliseconds: 1000), curve: Curves.easeOut, ); } }); Navigator.pop( context, ); }), ), const Spacer(), FikoButton1( textColor: Colors.red, textStrokeColor: Colors.transparent, text: "Kapat", onPressed: (() { Navigator.pop( context, ); }), ), ]), ); }, child: const Text("➕"), // const Icon(Icons.notifications, // color: Colors.lightBlue, size: 14), ), ), ], ), /*** * */ Container( alignment: Alignment.centerLeft, padding: const EdgeInsets.all(1), margin: const EdgeInsets.symmetric(vertical: 5), decoration: BoxDecoration( border: Border.all(color: Colors.grey.shade300), borderRadius: BorderRadius.circular(15), color: Colors.grey.shade100, ), child: SizedBox( height: 18.0, child: ShaderMask( shaderCallback: (Rect rect) { return const LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: [Colors.purple, Colors.transparent, Colors.transparent, Colors.purple], stops: [0.0, 0.1, 0.9, 1.0], // 10% purple, 80% transparent, 10% purple ).createShader(rect); }, blendMode: BlendMode.dstOut, child: SingleChildScrollView( scrollDirection: Axis.horizontal, physics: const BouncingScrollPhysics(), child: Row( children: [ FikoButton1( text: "🧬 Panoya Kopyala", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () { String data = json.encode(kayit.value.molalar); Clipboard.setData(ClipboardData(text: data)); SnackBar snck = const SnackBar( // behavior: SnackBarBehavior.floating, // margin: EdgeInsets.symmetric(vertical: 50.0, horizontal: 30), dismissDirection: DismissDirection.down, showCloseIcon: true, content: Text('Liste Panoya Kopyalandı'), duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); }, ), FikoButton1( text: "📋 Panodan Çek", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () async { try { List lstMl = []; dynamic panoData = json.decode((await Clipboard.getData(Clipboard.kTextPlain))?.text ?? "{}"); for (var i = 0; i < panoData.length; i++) { lstMl.add(Mola.fromJson(panoData[i])); } kayit.value.molalar = lstMl; FikoYTService.servisMesaici.ayarlarModel!.refresh(); ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('Liste Panodan Kopyalandı'), duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ), ); } catch (e) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: const Text( 'Veri Hatası', style: TextStyle(color: Colors.white), ), backgroundColor: Colors.red, action: SnackBarAction( label: 'Tamam', onPressed: () { // Action butonuna tıklanınca yapılacak işlemler }, ), duration: const Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ), ); } }, ), FikoButton1( text: "💾 Dosyaya Aktar", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () async { try { String data = json.encode(kayit.value.molalar); // JSON verisini oluştur String jsonString = data; // Dosya kaydetme yerini sor String? outputPath = await FilePicker.platform.saveFile( dialogTitle: 'Kayıt dosyası nereye kaydedilsin?', fileName: 'Molalar.json', bytes: Uint8List.fromList(utf8.encode(data)), ); if (outputPath != null) { if (Platform.isAndroid == false && Platform.isIOS == false) { // Dosyayı yaz File file = File(outputPath); await file.writeAsString(jsonString); } SnackBar snck = const SnackBar( content: Text('Dosya Kaydedildi'), duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); } else { SnackBar snck = const SnackBar( content: Text('Dosya Kaydedilmesi İptal Edildi.'), backgroundColor: Colors.red, duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); } } catch (e) { SnackBar snck = const SnackBar( content: Text('Bir Hata Oluştu'), backgroundColor: Colors.red, duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); } }, ), FikoButton1( text: "📂 Dosyadan Çek", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () async { try { // Dosya seçme FilePickerResult? result = await FilePicker.platform.pickFiles( dialogTitle: 'Kayıt dosyasını seçin', type: FileType.custom, allowedExtensions: ['json'], // Sadece JSON dosyalarını seçtir ); if (result != null && result.files.single.path != null) { // Dosya yolunu al String filePath = result.files.single.path!; // Dosyanın içeriğini oku File file = File(filePath); String fileContent = await file.readAsString(); // JSON verisini çözümle List lstMl = []; dynamic panoData = json.decode(fileContent); for (var i = 0; i < panoData.length; i++) { lstMl.add(Mola.fromJson(panoData[i])); } kayit.value.molalar = lstMl; FikoYTService.servisMesaici.ayarlarModel!.refresh(); } else {} } catch (e) { SnackBar snck = const SnackBar( content: Text('Bir Hata Oluştu'), backgroundColor: Colors.red, duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); } }, ), // FikoButton1( // text: "📡 İnternetten Çek", // textSize: 10, // textAlign: TextAlign.start, // edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), // textStrokeWidth: 0, // textColor: Colors.black87, // textStrokeColor: Colors.transparent, // onPressed: () {}, // ), FikoButton1( text: "🗑️ Tümünü Sil", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () async { FikoYTService.dialogGoster( context, const Text("Listedeki Tüm Kayıtlar Silinecek.Bu İşlem Geri Alınamaz. Onaylıyormusunuz?"), FikoDialogAyarlari(baslik: "Onay", baslikSimge: "❔", altButonlar: [ FikoButton1( textColor: Colors.green, textStrokeColor: Colors.transparent, text: "✔️ Onaylıyorum", onPressed: () { kayit.value.molalar = []; FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }, ), const Spacer(), FikoButton1( textColor: Colors.red, textStrokeColor: Colors.transparent, text: "❌ Onaylamıyorum", onPressed: (() { FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }), ), ])); }, onLongPress: () { kayit.value.molalar = []; FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, ), ], ), ), ), ), ), /** * */ /** */ kayit.value.molalar!.isEmpty ? Padding( padding: const EdgeInsets.only(top: 30.0), child: Stack( children: [ Card( child: Container( height: 60.0, ), ), FractionalTranslation( translation: const Offset(0.0, -0.4), child: Align( alignment: const FractionalOffset(0.5, 0.0), child: CircleAvatar( // backgroundColor: Colors.redAccent.shade200, radius: 25.0, child: Image.asset( 'assets/mesaici/ayarlar/cay.png', // width: 300, width: 42, height: 42, fit: BoxFit.contain, ), ), ), ), Padding( padding: const EdgeInsets.only(top: 30), child: Align( alignment: const FractionalOffset(0.5, 0.5), child: Text( "Henüz Mola Kaydı Girilmemiş", style: TextStyle(fontSize: 14, fontWeight: FontWeight.w300, color: Colors.blueAccent.shade400), textAlign: TextAlign.center, ), ), ), ], ), ).animate(effects: [const FadeEffect(), ShimmerEffect(delay: 1000.ms)]) : MolalarListView( gunObs: kayit, scrollController: kayit.value.molalarScrollController, ), // SizedBox( // height: 55, // child: ShaderMask( // shaderCallback: (Rect rect) { // return const LinearGradient( // begin: Alignment.centerLeft, // end: Alignment.centerRight, // colors: [Colors.purple, Colors.transparent, Colors.transparent, Colors.purple], // stops: [0.0, 0.1, 0.9, 1.0], // 10% purple, 80% transparent, 10% purple // ).createShader(rect); // }, // blendMode: BlendMode.dstOut, // child: SingleChildScrollView( // scrollDirection: Axis.horizontal, // physics: const BouncingScrollPhysics(), // child: Row( // children: [ // for (var k = 0; k < (gunObs.value.molalar ?? []).length; k++) // Obx(() { // Rx molaObs = gunObs.value.molalar![k].obs; // molaObs.listen((val) { // gunObs.value.molalar![k] = val; // gunObs.refresh(); // FikoYTService.servisMesaici.ayarlarModel!.refresh(); // }); // return Padding( // padding: const EdgeInsets.symmetric(horizontal: 4), // child: ChoiceChip( // avatar: Image.asset( // 'assets/mesaici/ayarlar/cay.png', // width: 40, // height: 40, // fit: BoxFit.contain, // ), // padding: const EdgeInsets.all(3), // label: Column( // children: [ // Align( // alignment: Alignment.centerLeft, // child: Obx( // () => Text( // (molaObs.value.ismi == "" && molaObs.value.ismi == null) ? "İsim Verilmemiş" : molaObs.value.ismi ?? "İsim Verilmemiş", // style: const TextStyle(fontSize: 12), // textAlign: TextAlign.start, // ), // ), // ), // Row( // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // FikoButton1(text: molaObs.value.girisSaati?.formatla("HH:mm:ss") ?? "Yok", textSize: 10, textColor: Colors.green, textStrokeColor: Colors.transparent), // FikoButton1(text: molaObs.value.cikisSaati?.formatla("HH:mm:ss") ?? "Yok", textSize: 10, textColor: Colors.red, textStrokeColor: Colors.transparent), // ], // ), // Row( // crossAxisAlignment: CrossAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.center, // children: [ // FikoButton1(text: molaObs.value.farkHesapla().insanize ?? 'Yok', textSize: 14, textColor: Colors.green, textStrokeColor: Colors.transparent), // ], // ), // ], // ), // checkmarkColor: Colors.transparent, // backgroundColor: Colors.transparent, // showCheckmark: false, // selected: false, // onSelected: (bool selected) { // FikoYTService.dialogGoster( // context, // SizedBox( // width: 250, // child: MolaDialog(mola: molaObs), // ), // FikoDialogAyarlari(baslik: "Mola Düzenle", altButonlar: [ // FikoButton1( // textColor: Colors.red, // textStrokeColor: Colors.transparent, // text: "Sil", // onPressed: () { // List? list0 = gunObs.value.molalar?.toList(); // list0?.remove(molaObs.value); // gunObs.value.molalar = list0; // gunObs.refresh(); // FikoYTService.servisMesaici.ayarlarModel!.refresh(); // Navigator.pop(context); // }, // ), // const Spacer(), // FikoButton1( // textColor: Colors.green, // textStrokeColor: Colors.transparent, // text: "Kapat", // onPressed: (() { // molaObs.refresh(); // gunObs.refresh(); // FikoYTService.servisMesaici.ayarlarModel!.refresh(); // Navigator.pop(context); // }), // ), // ]), // ); // }, // ), // ).animate(effects: [const FadeEffect(), ShimmerEffect(delay: 1000.ms)]); // }), // ], // ), // ), // ), // ), ListTile( dense: true, subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Mesai Oranı (${kayit.value.mesaiOrani}%)', style: const TextStyle( fontWeight: FontWeight.bold, ), ), Obx( () => FikoYaziKutusu( baslik: "Mesai Oranı", simgeSol: const Text( "💸", style: TextStyle(fontSize: 16), ), sonEk: const Text("%"), radius: 5.0, klavyeTipi: TextInputType.number, degeri: kayit.value.mesaiOrani.toString(), degisti: (value, {kontrolcu}) async { kayit.value.mesaiOrani = double.parse(value.replaceAll("%", "").replaceAll(",", "")); kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, // degeri: "0.00₺", ), ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ FikoButton1( text: "⏳ 50 %", textSize: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), textColor: kayit.value.mesaiOrani == 50 ? Colors.yellow : Colors.black, textStrokeColor: Colors.transparent, backColor: kayit.value.mesaiOrani == 50 ? Colors.blue : Colors.transparent, borderColor: kayit.value.mesaiOrani == 50 ? Colors.yellow : Colors.blue, onPressed: () { kayit.value.mesaiOrani = 50; kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, ), const SizedBox( width: 5, ), FikoButton1( text: "⏳ 100 %", textSize: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), textColor: kayit.value.mesaiOrani == 100 ? Colors.yellow : Colors.black, textStrokeColor: Colors.transparent, backColor: kayit.value.mesaiOrani == 100 ? Colors.blue : Colors.transparent, borderColor: kayit.value.mesaiOrani == 100 ? Colors.yellow : Colors.blue, onPressed: () { kayit.value.mesaiOrani = 100; kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, ), const SizedBox( width: 5, ), FikoButton1( text: "⏳ 150 %", textSize: 10, edgePadding: const EdgeInsets.symmetric(horizontal: 10, vertical: 1), textColor: kayit.value.mesaiOrani == 150 ? Colors.yellow : Colors.black, textStrokeColor: Colors.transparent, backColor: kayit.value.mesaiOrani == 150 ? Colors.blue : Colors.transparent, borderColor: kayit.value.mesaiOrani == 150 ? Colors.yellow : Colors.blue, onPressed: () { kayit.value.mesaiOrani = 150; kayit.refresh(); FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, ), ], ), ], ), // trailing: const Icon(Icons.chevron_right_sharp), isThreeLine: true, splashColor: Colors.grey.shade300, onTap: () {}, ), /** Ek Ödemeler - Kesintiler */ Visibility( visible: false, child: Column( children: [ Row( children: [ Expanded( child: FikoButton1( text: "Vergiler / Kesintiler / Primler ", textSize: 12, textAlign: TextAlign.center, edgePadding: const EdgeInsets.symmetric(vertical: 2.0), textStrokeWidth: 0, textColor: Colors.redAccent, textStrokeColor: Colors.transparent, ), ), ], ), /*** * */ Container( alignment: Alignment.centerLeft, padding: const EdgeInsets.all(1), margin: const EdgeInsets.symmetric(vertical: 5), decoration: BoxDecoration( border: Border.all(color: Colors.grey.shade300), borderRadius: BorderRadius.circular(15), color: Colors.grey.shade100, ), child: SizedBox( height: 18.0, child: ShaderMask( shaderCallback: (Rect rect) { return const LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: [Colors.purple, Colors.transparent, Colors.transparent, Colors.purple], stops: [0.0, 0.1, 0.9, 1.0], // 10% purple, 80% transparent, 10% purple ).createShader(rect); }, blendMode: BlendMode.dstOut, child: SingleChildScrollView( scrollDirection: Axis.horizontal, physics: const BouncingScrollPhysics(), child: Row( children: [ FikoButton1( text: "🧬 Panoya Kopyala", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () { String data = json.encode({ "ekOdemeler": kayit.value.ekOdemeler, "kesintiler": kayit.value.kesintiler, "vergiler": kayit.value.vergiler, }); Clipboard.setData(ClipboardData(text: data)); SnackBar snck = const SnackBar( // behavior: SnackBarBehavior.floating, // margin: EdgeInsets.symmetric(vertical: 50.0, horizontal: 30), dismissDirection: DismissDirection.down, showCloseIcon: true, content: Text('Liste Panoya Kopyalandı'), duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); }, ), FikoButton1( text: "📋 Panodan Çek", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () async { try { List lstEkOdm = []; List lstKesinti = []; List lstVrg = []; dynamic panoData = json.decode((await Clipboard.getData(Clipboard.kTextPlain))?.text ?? "{}"); for (var i = 0; i < panoData["ekOdemeler"]?.length; i++) { lstEkOdm.add(EkOdeme.fromJson(panoData["ekOdemeler"]?[i])); } for (var i = 0; i < panoData["kesintiler"]?.length; i++) { lstKesinti.add(Kesinti.fromJson(panoData["kesintiler"]?[i])); } for (var i = 0; i < panoData["vergiler"]?.length; i++) { lstVrg.add(Vergi.fromJson(panoData["vergiler"]?[i])); } kayit.value.ekOdemeler = lstEkOdm; kayit.value.kesintiler = lstKesinti; kayit.value.vergiler = lstVrg; FikoYTService.servisMesaici.ayarlarModel!.refresh(); ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text('Liste Panodan Kopyalandı'), duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ), ); } catch (e) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: const Text( 'Veri Hatası', style: TextStyle(color: Colors.white), ), backgroundColor: Colors.red, action: SnackBarAction( label: 'Tamam', onPressed: () { // Action butonuna tıklanınca yapılacak işlemler }, ), duration: const Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ), ); } }, ), FikoButton1( text: "💾 Dosyaya Aktar", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () async { try { String data = json.encode({ "ekOdemeler": kayit.value.ekOdemeler, "kesintiler": kayit.value.kesintiler, "vergiler": kayit.value.vergiler, }); // JSON verisini oluştur String jsonString = data; // Dosya kaydetme yerini sor String? outputPath = await FilePicker.platform.saveFile( dialogTitle: 'Kayıt dosyası nereye kaydedilsin?', fileName: 'VergilerKesintilerPrimler.json', bytes: Uint8List.fromList(utf8.encode(data)), ); if (outputPath != null) { if (Platform.isAndroid == false && Platform.isIOS == false) { // Dosyayı yaz File file = File(outputPath); await file.writeAsString(jsonString); } SnackBar snck = const SnackBar( content: Text('Dosya Kaydedildi'), duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); } else { SnackBar snck = const SnackBar( content: Text('Dosya Kaydedilmesi İptal Edildi.'), backgroundColor: Colors.red, duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); } } catch (e) { SnackBar snck = const SnackBar( content: Text('Bir Hata Oluştu'), backgroundColor: Colors.red, duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); } }, ), FikoButton1( text: "📂 Dosyadan Çek", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () async { try { // Dosya seçme FilePickerResult? result = await FilePicker.platform.pickFiles( dialogTitle: 'Kayıt dosyasını seçin', type: FileType.custom, allowedExtensions: ['json'], // Sadece JSON dosyalarını seçtir ); if (result != null && result.files.single.path != null) { // Dosya yolunu al String filePath = result.files.single.path!; // Dosyanın içeriğini oku File file = File(filePath); String fileContent = await file.readAsString(); // JSON verisini çözümle List lstEkOdm = []; List lstKesinti = []; List lstVrg = []; dynamic panoData = json.decode(fileContent); for (var i = 0; i < panoData["ekOdemeler"]?.length; i++) { lstEkOdm.add(EkOdeme.fromJson(panoData["ekOdemeler"]?[i])); } for (var i = 0; i < panoData["kesintiler"]?.length; i++) { lstKesinti.add(Kesinti.fromJson(panoData["kesintiler"]?[i])); } for (var i = 0; i < panoData["vergiler"]?.length; i++) { lstVrg.add(Vergi.fromJson(panoData["vergiler"]?[i])); } kayit.value.ekOdemeler = lstEkOdm; kayit.value.kesintiler = lstKesinti; kayit.value.vergiler = lstVrg; FikoYTService.servisMesaici.ayarlarModel!.refresh(); } else {} } catch (e) { SnackBar snck = const SnackBar( content: Text('Bir Hata Oluştu'), backgroundColor: Colors.red, duration: Duration(seconds: 2), // SnackBar'ın ekranda kalma süresi ); ScaffoldMessenger.of(context).showSnackBar(snck); } }, ), // FikoButton1( // text: "📡 İnternetten Çek", // textSize: 10, // textAlign: TextAlign.start, // edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), // textStrokeWidth: 0, // textColor: Colors.black87, // textStrokeColor: Colors.transparent, // onPressed: () {}, // ), FikoButton1( text: "🗑️ Tümünü Sil", textSize: 10, textAlign: TextAlign.start, edgePadding: const EdgeInsets.symmetric(vertical: 2.0, horizontal: 5), textStrokeWidth: 0, textColor: Colors.black87, textStrokeColor: Colors.transparent, onPressed: () async { FikoYTService.dialogGoster( context, const Text("Listedeki Tüm Kayıtlar Silinecek.Bu İşlem Geri Alınamaz. Onaylıyormusunuz?"), FikoDialogAyarlari(baslik: "Onay", baslikSimge: "❔", altButonlar: [ FikoButton1( textColor: Colors.green, textStrokeColor: Colors.transparent, text: "✔️ Onaylıyorum", onPressed: () { kayit.value.vergiler = []; kayit.value.kesintiler = []; kayit.value.ekOdemeler = []; FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }, ), const Spacer(), FikoButton1( textColor: Colors.red, textStrokeColor: Colors.transparent, text: "❌ Onaylamıyorum", onPressed: (() { FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }), ), ])); }, onLongPress: () { kayit.value.vergiler = []; kayit.value.kesintiler = []; kayit.value.ekOdemeler = []; FikoYTService.servisMesaici.ayarlarModel!.refresh(); }, ), ], ), ), ), ), ), /** * */ /** */ EkOdemelerWidget(kayit: kayit), const SizedBox( height: 5, ), /** */ KesintilerWidget(kayit: kayit), const SizedBox( height: 5, ), /** */ VergilerWidget(kayit: kayit), const SizedBox( height: 5, ), ], ), ), ], ), // trailing: const Icon(Icons.chevron_right_sharp), isThreeLine: true, splashColor: Colors.grey.shade300, onTap: () {}, ), ], ), ), Align( alignment: Alignment.centerRight, child: TextButton( // icon: const Text("💡"), child: const Text( "⚙️ Tüm Günlere Uygula", style: TextStyle( color: Colors.blue, fontWeight: FontWeight.bold, fontSize: 12, ), ), onPressed: () { FikoYTService.dialogGoster( context, const Text("Tüm Günlerin Ayarları Bu Güne Göre Eşitlenecek.Bu İşlem Geri Alınamaz. Onaylıyormunuz?"), FikoDialogAyarlari(baslik: "Onay", baslikSimge: "❔", altButonlar: [ FikoButton1( textColor: Colors.green, textStrokeColor: Colors.transparent, text: "✔️ Onaylıyorum", onPressed: () { FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].gunAyarlari.pazartesi.fromOther(gun: kayit.value); FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].gunAyarlari.sali.fromOther(gun: kayit.value); FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].gunAyarlari.carsamba.fromOther(gun: kayit.value); FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].gunAyarlari.persembe.fromOther(gun: kayit.value); FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].gunAyarlari.cuma.fromOther(gun: kayit.value); FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].gunAyarlari.cumartesi.fromOther(gun: kayit.value); FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.vardiyalar[FikoYTService.servisMesaici.ayarlarModel!.value.calismaSuresiAyarlari.aktifVardiya ?? 0].gunAyarlari.pazar.fromOther(gun: kayit.value); FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }, ), const Spacer(), FikoButton1( textColor: Colors.red, textStrokeColor: Colors.transparent, text: "❌ Onaylamıyorum", onPressed: (() { FikoYTService.servisMesaici.ayarlarModel!.refresh(); Navigator.pop( context, ); }), ), ]), ); }, ), ), ], ), contentPadding: EdgeInsets.zero, collapsedIcon: const Icon(Icons.arrow_drop_down), expandedIcon: const Icon(Icons.arrow_drop_up), titleBorderRadius: const BorderRadius.only( topLeft: Radius.circular(5), topRight: Radius.circular(5), ), // expandedTitlebackgroundColor: Theme.of(context).extension()?.arkaPlanRenk,//Colors.grey.shade200, contentBorder: Border.all(color: Colors.grey.shade200), contentBorderRadius: const BorderRadius.only( bottomLeft: Radius.circular(5), bottomRight: Radius.circular(5), ), titlePadding: const EdgeInsets.symmetric( horizontal: 10, vertical: 5, ), showAccordion: false, ); }, ), ], ), ), ], ), ); } }