// ignore_for_file: library_private_types_in_public_api import 'package:fikoyt_merkez/apps/mesaici/widgets/fikoyt_calisma_gosterge/fikoyt_calisma_gosterge.dart'; import 'package:fikoyt_merkez/apps/mesaici/widgets/mesaici_navigasyon/mesaici_navigasyon.dart'; import 'package:fikoyt_merkez/apps/mesaici/widgets/ozet_aylik/ozet_aylik.dart'; import 'package:fikoyt_merkez/apps/mesaici/widgets/uygulama_baslik/uygulama_baslik.dart'; import 'package:fikoyt_merkez/core/widgets/fiko_ui/fiko_button/fiko_button.dart'; import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart' as sc; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; import 'package:vrouter/vrouter.dart'; import '../../../core/widgets/base_page/base_page_view.dart'; import '../../../core/widgets/fikoyt_elastic/fikoyt_elastic.dart'; import '../../core/fikoyt.service.dart'; import '../../core/interface/fiko_dialog_ayarlari.dart'; import '../../core/widgets/draggable_home.dart'; import '../../core/widgets/yazi_kutulari/yazi_kutulari.dart'; import 'base_page_mesaici_view.dart'; import 'servisler/fikoyt.mesaici.service.dart'; import 'widgets/aktif_kart/aktif_kart.dart'; import 'widgets/kullanici_bilgi_navigasyon/kullanici_bilgi_navigasyon.dart'; class PageMesaiciHomeLogic extends GetxController {} class PageMesaiciHome extends StatefulWidget { const PageMesaiciHome({super.key}); @override _PageMesaiciHomeState createState() => _PageMesaiciHomeState(); } class _PageMesaiciHomeState extends State { PageMesaiciHomeLogic logic = Get.put(PageMesaiciHomeLogic()); BasePageLogic basePageLogic = Get.put(BasePageLogic()); BasePageMesaiciLogic basePageMesaiciLogic = Get.put(BasePageMesaiciLogic()); final FikoYTMesaiciService servisMesaici = Get.put(FikoYTMesaiciService()); final FikoYTService servisFikoYT = FikoYTService(); //---> int touchedIndex = 0; @override Widget build(BuildContext context) { sc.SchedulerBinding.instance.addPostFrameCallback((_) { basePageLogic.subTitle.value = "🏠 Merkez"; }); ScreenSizeTypes screenType = FikoYTElastic.getScreenSizeType(context); [ // ScreenSizeTypes.small, ScreenSizeTypes.mini, ScreenSizeTypes.extraMini ].contains(screenType); return DraggableHome( leading: const UygulamaBaslikSol(), title: UygulamaBaslikOrta(), actions: const [ UygulamaBaslikSag(), ], headerWidget: PageView( children: [ Container( color: Colors.transparent, //Colors.orange, height: 200 - kToolbarHeight - 10, margin: const EdgeInsets.only( top: kToolbarHeight, bottom: 10, right: 10, left: 10), child: Column( children: [ const Center( child: FikoYTCalismaGosterge(), ), Obx( () => FikoButton1( text: "👩🏻‍🤝‍👨🏽 ${servisMesaici.mesaiciAyarlar.hesapAyarlari.adSoyad.value.isEmpty ? "İsim Tanımlayın" : servisMesaici.mesaiciAyarlar.hesapAyarlari.adSoyad.value}", textSize: 16, textStrokeColor: Colors.blue, onLongPress: () { FikoYTService.dialogGoster( context, Column( children: [ const Text( "İsminizi Ve Soyisminizi Giriniz.", ), FikoYaziKutusu( baslik: "👩🏻‍🤝‍👨🏽 İsminiz Soysiminiz", radius: 5.0, degeri: servisMesaici .mesaiciAyarlar.hesapAyarlari.adSoyad.value, degisti: (value) { servisMesaici.mesaiciAyarlar.hesapAyarlari .adSoyad.value = value; }, ), ], ), FikoDialogAyarlari( baslik: "Bilgileriniz", baslikSimge: "👩🏻‍🤝‍👨🏽", altButonlar: [ TextButton( onPressed: () { Navigator.pop(context); }, child: const Text( "İptal", style: TextStyle( color: Colors.redAccent, fontWeight: FontWeight.bold), ), ), TextButton( onPressed: () { servisMesaici.ayarlariKaydet(); Navigator.pop(context); }, child: const Text( "Kaydet", style: TextStyle( color: Colors.green, fontWeight: FontWeight.bold), ), ), ], ), ); }, ), ), Obx( () => FikoButton1( text: "🏭 ${servisMesaici.mesaiciAyarlar.hesapAyarlari.sirket.value.isEmpty ? "Şirket Tanımlayın" : servisMesaici.mesaiciAyarlar.hesapAyarlari.sirket.value}", textSize: 12, textStrokeColor: Colors.black, textColor: Colors.white, onLongPress: () { FikoYTService.dialogGoster( context, Column( children: [ const Text( "Şirketinizi Giriniz.", ), FikoYaziKutusu( baslik: "🏭 Şirketinizin Adı", radius: 5.0, degeri: servisMesaici .mesaiciAyarlar.hesapAyarlari.sirket.value, degisti: (value) { servisMesaici.mesaiciAyarlar.hesapAyarlari .sirket.value = value; }, ), ], ), FikoDialogAyarlari( altButonlar: [ TextButton( onPressed: () { Navigator.pop(context); }, child: const Text( "İptal", style: TextStyle( color: Colors.redAccent, fontWeight: FontWeight.bold), ), ), TextButton( onPressed: () { servisMesaici.ayarlariKaydet(); Navigator.pop(context); }, child: const Text( "Kaydet", style: TextStyle( color: Colors.green, fontWeight: FontWeight.bold), ), ), ], baslik: "Şirketiniz", baslikSimge: "🏭", ), ); }, ), ), const MesaiciNavigasyon(), ], ), ), /** */ 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: TextButton( onPressed: () async { final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); context.vRouter.to("/mesaici/ilk-ekran"); const AndroidNotificationDetails androidNotificationDetails = AndroidNotificationDetails( 'your channel id', 'your channel name', channelDescription: 'your channel description', importance: Importance.max, priority: Priority.high, ticker: 'ticker', progress: 70, showProgress: false, maxProgress: 100, styleInformation: MediaStyleInformation()); const NotificationDetails notificationDetails = NotificationDetails(android: androidNotificationDetails); await flutterLocalNotificationsPlugin.show( 0, 'FikoYT', 'Merkez', notificationDetails, payload: 'item x'); }, child: const Text( "🏠", style: TextStyle( fontSize: 54, ), ), ), ), ), /** */ Container( color: Colors.transparent, //Colors.orange, height: 300 - kToolbarHeight - 10, margin: const EdgeInsets.only( top: kToolbarHeight, bottom: 10, right: 10, left: 10), child: AspectRatio( aspectRatio: 1.3, child: AspectRatio( aspectRatio: 1, child: PieChart( PieChartData( pieTouchData: PieTouchData( touchCallback: (FlTouchEvent event, pieTouchResponse) { setState(() { if (!event.isInterestedForInteractions || pieTouchResponse == null || pieTouchResponse.touchedSection == null) { touchedIndex = -1; return; } touchedIndex = pieTouchResponse .touchedSection!.touchedSectionIndex; }); }, ), borderData: FlBorderData( show: false, ), sectionsSpace: 0, centerSpaceRadius: 40, sections: showingSections(), ), ), ), ), ), ], ), // headerBottomBar: Container( // padding: EdgeInsets.zero, // margin: EdgeInsets.zero, // height: kToolbarHeight, // child: Row( // crossAxisAlignment: CrossAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.start, // children: [ // IconButton( // onPressed: () {}, // icon: const Image( // image: AssetImage('assets/core/icons/logo.png'), // filterQuality: FilterQuality.high, // ), // iconSize: kToolbarHeight, // splashRadius: 20, // color: Colors.blue.shade300, // ), // const Expanded( // child: Image( // image: AssetImage('assets/core/icons/fikoyt.png'), // filterQuality: FilterQuality.high, // height: 32, // // width: widget.logoWidth * cardWidth, // ), // ), // IconButton( // onPressed: () {}, // icon: const Icon( // Icons.settings, // ), // color: Colors.blue.shade300, // iconSize: 22, // splashRadius: 20, // ), // ], // ), // ), body: [ Column( children: [ Padding( padding: const EdgeInsets.only( left: 24, right: 24, top: 15, bottom: 24), child: Stack( clipBehavior: Clip.none, children: [ Padding( padding: const EdgeInsets.only(top: 20), child: Container( decoration: BoxDecoration( color: Colors.blueAccent.shade100.withOpacity(0.2), borderRadius: const BorderRadius.only( topLeft: Radius.circular(8.0), bottomLeft: Radius.circular(8.0), bottomRight: Radius.circular(8.0), topRight: Radius.circular(8.0)), border: Border.all(color: Colors.blueAccent), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.2), // offset: const Offset(0.9, 0.9), offset: const Offset(3, 3), spreadRadius: 5, blurRadius: 10.0, ), ], ), child: Padding( padding: const EdgeInsets.only( left: 46, bottom: 12, right: 16, top: 12), child: Column( children: [ Text( 'Bu Ay Devamsızlığınız Oldukça Fazla.İş Yerinizde Hayaletleşmeyin', textAlign: TextAlign.left, style: TextStyle( fontWeight: FontWeight.w500, fontSize: 12, letterSpacing: 0.0, color: Colors.blueAccent.shade700, ), ), Align( alignment: Alignment.centerRight, child: TextButton( // icon: const Text("💡"), child: const Text( "💡 Öneriler", style: TextStyle( color: Colors.blue, fontWeight: FontWeight.bold, fontSize: 12, ), ), onPressed: () {}, ), ) ], ), ), ), ), const Positioned( top: -10, left: 0, child: SizedBox( width: 80, height: 80, child: Text( "👻", style: TextStyle(fontSize: 40), ), ), ) ], ), ), ], ), Container( margin: const EdgeInsets.only(top: 10, bottom: 10, right: 10, left: 10), child: AktifKart(), ), Container( margin: const EdgeInsets.only(top: 10, bottom: 10, right: 10, left: 10), child: const OzetAylik(), ), ], headerExpandedHeight: 340, // 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("/"); }, ); } @override void dispose() { Get.delete(); super.dispose(); } List showingSections() { return List.generate(4, (i) { final isTouched = i == touchedIndex; final fontSize = isTouched ? 16.0 : 12.0; final radius = isTouched ? 60.0 : 50.0; final widgetSize = isTouched ? 45.0 : 30.0; const shadows = [Shadow(color: Colors.black, blurRadius: 2)]; switch (i) { case 0: return PieChartSectionData( color: Colors.blue, value: 40, title: '40%', radius: radius, titleStyle: TextStyle( fontSize: fontSize, fontWeight: FontWeight.bold, color: const Color(0xffffffff), shadows: shadows, ), badgeWidget: _Badge( 'assets/icons/ophthalmology-svgrepo-com.svg', size: widgetSize, borderColor: Colors.black54, ), badgePositionPercentageOffset: .98, ); case 1: return PieChartSectionData( color: Colors.yellow, value: 30, title: '30%', radius: radius, titleStyle: TextStyle( fontSize: fontSize, fontWeight: FontWeight.bold, color: const Color(0xffffffff), shadows: shadows, ), badgeWidget: _Badge( 'assets/icons/librarian-svgrepo-com.svg', size: widgetSize, borderColor: Colors.black54, ), badgePositionPercentageOffset: .98, ); case 2: return PieChartSectionData( color: Colors.purple, value: 16, title: '16%', radius: radius, titleStyle: TextStyle( fontSize: fontSize, fontWeight: FontWeight.bold, color: const Color(0xffffffff), shadows: shadows, ), badgeWidget: _Badge( 'assets/icons/fitness-svgrepo-com.svg', size: widgetSize, borderColor: Colors.black54, ), badgePositionPercentageOffset: .98, ); case 3: return PieChartSectionData( color: Colors.green, value: 15, title: '15%', radius: radius, titleStyle: TextStyle( fontSize: fontSize, fontWeight: FontWeight.bold, color: const Color(0xffffffff), shadows: shadows, ), badgeWidget: _Badge( 'assets/icons/worker-svgrepo-com.svg', size: widgetSize, borderColor: Colors.black54, ), badgePositionPercentageOffset: .98, ); default: throw Exception('Oh no'); } }); } } class _Badge extends StatelessWidget { const _Badge( this.svgAsset, { required this.size, required this.borderColor, }); final String svgAsset; final double size; final Color borderColor; @override Widget build(BuildContext context) { return AnimatedContainer( duration: PieChart.defaultDuration, width: size, height: size, decoration: BoxDecoration( color: Colors.white, shape: BoxShape.circle, border: Border.all( color: borderColor, width: 2, ), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(.5), offset: const Offset(3, 3), blurRadius: 3, ), ], ), padding: EdgeInsets.all(size * .15), child: const Center( child: Text("👨🏻‍💼"), ), ); } }