import 'dart:async'; import 'package:android_intent_plus/android_intent.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_ui/ui/ui.dart'; import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; class AylikGrafik extends StatefulWidget { const AylikGrafik({super.key}); @override State createState() => _AylikGrafikState(); } class _AylikGrafikState extends State { //---> int touchedIndex = -1; List veri = [ // GrafikData( // rengi: Colors.blueGrey, // ismi: "Çalışma Süresi", // yuzdeDeger: "%50", // degeri: 100, // strDeger: "272 saat", // ), // GrafikData( // rengi: Colors.purple, // ismi: "Ç. Günü Mesaileri", // yuzdeDeger: "%5", // degeri: 30, // strDeger: "25 saat", // ), // GrafikData( // rengi: Colors.green, // ismi: "D. Günü Mesaileri", // yuzdeDeger: "%15", // degeri: 30, // strDeger: "2 saat", // ), // GrafikData( // rengi: Colors.amber, // ismi: "H.Tatili Mesaileri", // yuzdeDeger: "%8", // degeri: 15, // strDeger: "15 saat", // ), // GrafikData( // rengi: Colors.orange, // ismi: "R.Tatil Mesaileri", // yuzdeDeger: "%2", // degeri: 8, // strDeger: "65 saat", // ), // GrafikData( // rengi: Colors.deepPurpleAccent, // ismi: "İzinli Süre", // yuzdeDeger: "%1", // degeri: 1, // strDeger: "2.5 saat", // ), // GrafikData( // rengi: Colors.red, // ismi: "Raporlu Süre", // yuzdeDeger: "%3", // degeri: 10, // strDeger: "16 dakika", // ), // GrafikData( // rengi: Colors.lightBlue, // ismi: "Raporlu Süre", // yuzdeDeger: "%30", // degeri: 30, // strDeger: "30 dakika", // ), ]; verileriGuncelle() async { await FikoYTService.servisMesaici.aylikOzet?.aktifAyhesapla(); veri = [ GrafikData( rengi: Colors.blueGrey, ismi: "Çalışma Süresi", yuzdeDeger: "${(((FikoYTService.servisMesaici.aylikOzet?.normalCalismaSuresi.inMilliseconds ?? 0.0) / (FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.aylikCalismaSaati?.inMilliseconds ?? 0.0)) * 100).toPrecision(2)}%", degeri: (FikoYTService.servisMesaici.aylikOzet?.normalCalismaSuresi.inMinutes ?? 0.0).toDouble() < 1000.0 ? 1000 : (FikoYTService.servisMesaici.aylikOzet?.normalCalismaSuresi.inMinutes ?? 0.0).toDouble(), strDeger: FikoYTService.servisMesaici.aylikOzet?.normalCalismaSuresi.insanizeEk() ?? "", ), GrafikData( rengi: Colors.purple, ismi: "Ç. Günü Mesaileri", yuzdeDeger: "${(((FikoYTService.servisMesaici.aylikOzet?.calismaGunuMesaiSuresi.inMilliseconds ?? 0.0) / (FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.aylikCalismaSaati?.inMilliseconds ?? 0.0)) * 100).toPrecision(2)}%", degeri: (FikoYTService.servisMesaici.aylikOzet?.calismaGunuMesaiSuresi.inMinutes ?? 0.0).toDouble() < 1000.0 ? 1000 : (FikoYTService.servisMesaici.aylikOzet?.calismaGunuMesaiSuresi.inMinutes ?? 0.0).toDouble(), strDeger: FikoYTService.servisMesaici.aylikOzet?.calismaGunuMesaiSuresi.insanizeEk() ?? "", ), GrafikData( rengi: Colors.green, ismi: "D. Günü Mesaileri", yuzdeDeger: "${(((FikoYTService.servisMesaici.aylikOzet?.dinlenmeGunuMesaiSuresi.inMilliseconds ?? 0.0) / (FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.aylikCalismaSaati?.inMilliseconds ?? 0.0)) * 100).toPrecision(2)}%", degeri: (FikoYTService.servisMesaici.aylikOzet?.dinlenmeGunuMesaiSuresi.inMinutes ?? 0.0).toDouble() < 1000.0 ? 1000 : (FikoYTService.servisMesaici.aylikOzet?.dinlenmeGunuMesaiSuresi.inMinutes ?? 0.0).toDouble(), strDeger: FikoYTService.servisMesaici.aylikOzet?.dinlenmeGunuMesaiSuresi.insanizeEk() ?? "", ), GrafikData( rengi: Colors.amber, ismi: "H.Tatili Mesaileri", yuzdeDeger: "${(((FikoYTService.servisMesaici.aylikOzet?.haftaTatiliGunuMesaiSuresi.inMilliseconds ?? 0.0) / (FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.aylikCalismaSaati?.inMilliseconds ?? 0.0)) * 100).toPrecision(2)}%", degeri: (FikoYTService.servisMesaici.aylikOzet?.haftaTatiliGunuMesaiSuresi.inMinutes ?? 0.0).toDouble() < 1000.0 ? 1000 : (FikoYTService.servisMesaici.aylikOzet?.haftaTatiliGunuMesaiSuresi.inMinutes ?? 0.0).toDouble(), strDeger: FikoYTService.servisMesaici.aylikOzet?.haftaTatiliGunuMesaiSuresi.insanizeEk() ?? "", ), GrafikData( rengi: Colors.orange, ismi: "R.Tatil Mesaileri", yuzdeDeger: "${(((FikoYTService.servisMesaici.aylikOzet?.resmiTatilGunuMesaiSuresi.inMilliseconds ?? 0.0) / (FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.aylikCalismaSaati?.inMilliseconds ?? 0.0)) * 100).toPrecision(2)}%", degeri: (FikoYTService.servisMesaici.aylikOzet?.resmiTatilGunuMesaiSuresi.inMinutes ?? 0.0).toDouble() < 1000.0 ? 1000 : (FikoYTService.servisMesaici.aylikOzet?.resmiTatilGunuMesaiSuresi.inMinutes ?? 0.0).toDouble(), strDeger: FikoYTService.servisMesaici.aylikOzet?.resmiTatilGunuMesaiSuresi.insanizeEk() ?? "", ), GrafikData( rengi: Colors.deepPurpleAccent, ismi: "İzinli Süre", yuzdeDeger: "${(((FikoYTService.servisMesaici.aylikOzet?.izinliGunSuresi.inMilliseconds ?? 0.0) / (FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.aylikCalismaSaati?.inMilliseconds ?? 0.0)) * 100).toPrecision(2)}%", degeri: (FikoYTService.servisMesaici.aylikOzet?.izinliGunSuresi.inMinutes ?? 0.0).toDouble() < 1000.0 ? 1000 : (FikoYTService.servisMesaici.aylikOzet?.izinliGunSuresi.inMinutes ?? 0.0).toDouble(), strDeger: FikoYTService.servisMesaici.aylikOzet?.izinliGunSuresi.insanizeEk() ?? "", ), GrafikData( rengi: Colors.red, ismi: "Raporlu Süre", yuzdeDeger: "${(((FikoYTService.servisMesaici.aylikOzet?.raporluSure.inMilliseconds ?? 0.0) / (FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.aylikCalismaSaati?.inMilliseconds ?? 0.0)) * 100).toPrecision(2)}%", degeri: (FikoYTService.servisMesaici.aylikOzet?.raporluSure.inMinutes ?? 0.0).toDouble() < 1000.0 ? 1000 : (FikoYTService.servisMesaici.aylikOzet?.raporluSure.inMinutes ?? 0.0).toDouble(), strDeger: FikoYTService.servisMesaici.aylikOzet?.raporluSure.insanizeEk() ?? "", ), GrafikData( rengi: Colors.lightBlue, ismi: "Yıllık İzin", yuzdeDeger: "${(((FikoYTService.servisMesaici.aylikOzet?.yillikIzinliGunSuresi.inMilliseconds ?? 0.0) / (FikoYTService.servisMesaici.ayarlarModel?.value.calismaSuresiAyarlari.aylikCalismaSaati?.inMilliseconds ?? 0.0)) * 100).toPrecision(2)}%", degeri: (FikoYTService.servisMesaici.aylikOzet?.yillikIzinliGunSuresi.inMinutes ?? 0.0).toDouble() < 1000.0 ? 1000 : (FikoYTService.servisMesaici.aylikOzet?.yillikIzinliGunSuresi.inMinutes ?? 0.0).toDouble(), strDeger: FikoYTService.servisMesaici.aylikOzet?.yillikIzinliGunSuresi.insanizeEk() ?? "", ), ]; } //---> late StreamSubscription $takip; @override void initState() { verileriGuncelle(); $takip = FikoYTService.servisMesaici.aktifAy.listen( (p0) { setState(() { verileriGuncelle(); AndroidIntent intent = const AndroidIntent( action: 'com.fikoyt.mesaici.komut', package: 'com.fikoyt.mesaici', arguments: {'komut': "com.fikoyt.mesaici.komut.ozetAylik.hesapla"}, category: "android.intent.category.DEFAULT", ); intent.launch(); }); }, ); AndroidIntent intent = const AndroidIntent( action: 'com.fikoyt.mesaici.komut', package: 'com.fikoyt.mesaici', arguments: {'komut': "com.fikoyt.mesaici.komut.ozetAylik.hesapla"}, category: "android.intent.category.DEFAULT", ); intent.launch(); // TODO: implement initState super.initState(); } @override void dispose() { $takip.cancel(); // TODO: implement dispose super.dispose(); } // final FikoYTService.servisMesaici = Get.put(FikoYTMesaiciService()); @override Widget build(BuildContext context) { return Obx( () { FikoYTService.servisMesaici.aktifAy.value; // logic.FikoYTService.servisMesaici.aktifCalisma?.value; return FutureBuilder( future: verileriGuncelle(), builder: (context, snapshot) => Container( padding: const EdgeInsets.all(5), margin: const EdgeInsets.all(5), decoration: BoxDecoration( color: Theme.of(context).extension()?.kartArkaPlanRenk?, //Colors.white, borderRadius: const BorderRadius.all( Radius.circular(5), ), boxShadow: const [ BoxShadow(color: Colors.black12, offset: Offset(0, 0), spreadRadius: 1, blurRadius: 0.0, blurStyle: BlurStyle.outer), ]), child: Column( children: [ Row( children: [ // const Text( // "📅", // style: TextStyle(fontSize: 16), // ), SizedBox( width: 33, child: MaterialButton( elevation: 0, minWidth: 0, shape: const CircleBorder( // borderRadius: BorderRadius.all(Radius.circular(5)), side: BorderSide.none, ), padding: const EdgeInsets.all(0), child: const Text("📅"), // color: Colors.white, onPressed: () { // if (kDebugMode) { // Scaffold.of(context).openEndDrawer(); if (kDebugMode) { print('clicked'); } // } }, ), ), Expanded( child: FikoButton( text: FikoYTService.servisMesaici.aktifAy.value.formatla('MMMM yyyy'), tema: FikoButtonTema( textAlign: TextAlign.center, yaziSinirRengi: Colors.transparent, yaziRengi: FikoTheme.of(context).fikoButonTema.yaziRengi, // Colors.black87, boyutYazi: 14, ), ), ), SizedBox( width: 33, child: MaterialButton( elevation: 0, minWidth: 0, shape: const CircleBorder( // borderRadius: BorderRadius.all(Radius.circular(5)), side: BorderSide.none, ), padding: const EdgeInsets.all(0), child: const Text("♻️"), // color: Colors.white, onPressed: () { // if (kDebugMode) { // Scaffold.of(context).openEndDrawer(); if (kDebugMode) { print('clicked'); } // } }, ), ), ], ), const Divider( height: 2, ), /** NOT: Orta Bölüm */ Stack( alignment: Alignment.center, children: [ Container( color: Colors.transparent, //Colors.orange, height: 250, margin: const EdgeInsets.all(40), child: AspectRatio( aspectRatio: 1.4, child: PieChart( PieChartData( pieTouchData: PieTouchData( touchCallback: (FlTouchEvent event, pieTouchResponse) { if ((event is FlTapUpEvent)) { touchedIndex = touchedIndex == pieTouchResponse!.touchedSection!.touchedSectionIndex ? -1 : pieTouchResponse.touchedSection!.touchedSectionIndex; } setState(() {}); }, ), borderData: FlBorderData( show: true, ), startDegreeOffset: 0, titleSunbeamLayout: false, sectionsSpace: 2, centerSpaceRadius: 100, sections: showingSections(), ), ), ), ), ], ), Wrap( spacing: 5, runSpacing: 5, alignment: WrapAlignment.center, crossAxisAlignment: WrapCrossAlignment.center, children: [ for (var i = 0; i < veri.length; i++) GestureDetector( onTap: () { setState(() { touchedIndex = touchedIndex == i ? -1 : i; }); }, child: touchedIndex == i ? Row( spacing: 4, mainAxisSize: MainAxisSize.min, children: [ Container( width: 14, height: 14, color: veri[i].rengi, ), Text( veri[i].ismi, style: TextStyle(fontWeight: i == touchedIndex ? FontWeight.bold : FontWeight.normal, color: FikoTheme.of(context).fikoButonTema.yaziRengi), ), Text( veri[i].strDeger, style: TextStyle(fontWeight: i == touchedIndex ? FontWeight.bold : FontWeight.normal, color: FikoTheme.of(context).fikoButonTema.yaziRengi), ), ], ) : Opacity( opacity: touchedIndex != -1 ? 0.4 : 1, child: Row( spacing: 4, mainAxisSize: MainAxisSize.min, children: [ Container( width: 14, height: 14, color: veri[i].rengi, ), Text( veri[i].ismi, style: TextStyle(color: FikoTheme.of(context).fikoButonTema.yaziRengi), ), Text( veri[i].strDeger, style: TextStyle(color: FikoTheme.of(context).fikoButonTema.yaziRengi), ), ], ), ), ), ], ), ], ), ), ); }, ); } List showingSections() { List snc = []; for (var i = 0; i < veri.length; i++) { final isTouched = i == touchedIndex; final fontSize = isTouched ? 16.0 : 12.0; final radius = isTouched ? 50.0 : 35.0; final widgetSize = isTouched ? 45.0 : 30.0; const shadows = [Shadow(color: Colors.black, blurRadius: 2)]; snc.add(PieChartSectionData( gradient: LinearGradient( colors: [ veri[i].rengi, veri[i].rengi.withAlpha(100), ], transform: const GradientRotation(0.5), ), value: veri[i].degeri, title: veri[i].yuzdeDeger, radius: radius, titleStyle: TextStyle( fontSize: fontSize, fontWeight: FontWeight.bold, color: const Color(0xffffffff), shadows: shadows, ), )); } return snc; } } class GrafikData { String ismi; String yuzdeDeger; String strDeger; double degeri; Color rengi; GrafikData({required this.rengi, required this.ismi, required this.strDeger, required this.yuzdeDeger, required this.degeri}); }