import 'dart:async'; import 'package:fikoyt_ui/ui/ui.dart'; import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.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 { 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(); // 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 FutureBuilder( future: verileriGuncelle(), builder: (context, snapshot) => Container( padding: const EdgeInsets.all(5), margin: const EdgeInsets.all(5), decoration: BoxDecoration( color: Theme.of(context).extension()?.cardBackgroundColor, //Colors.white, borderRadius: const BorderRadius.all(Radius.circular(5)), boxShadow: [ BoxShadow( color: Theme.of(context).extension()!.shadowColor!, offset: const Offset(0, 0), spreadRadius: -1, blurRadius: 5.0, blurStyle: BlurStyle.outer, ), ], // border: Border.all( // color: Theme.of(context).extension()!.cardBackgroundColor!.withAlpha(255), // ), ), child: Column( children: [ Row( children: [ // const Text( // "📅", // style: TextStyle(fontSize: 16), // ), SizedBox( width: 33, height: 24, 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: FikoYTButton( text: FikoYTService.servisMesaici.aktifAy.value.formatla('MMMM yyyy'), tema: Theme.of(context).extension()?.copyWith( textAlign: TextAlign.center, textStrokeColor: Colors.transparent, textColor: Theme.of(context).extension()?.textColor, // Colors.black87, fontSize: 14, ), ), ), SizedBox( width: 33, height: 24, 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: Theme.of(context).extension()?.textColor, ), ), Text( veri[i].strDeger, style: TextStyle( fontWeight: i == touchedIndex ? FontWeight.bold : FontWeight.normal, color: Theme.of(context).extension()?.textColor, ), ), ], ) : 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: Theme.of(context).extension()?.textColor), ), Text( veri[i].strDeger, style: TextStyle(color: Theme.of(context).extension()?.textColor), ), ], ), ), ), ], ), ], ), ), ); } 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}); }