// ignore_for_file: library_prefixes import 'dart:async'; import 'dart:io'; import 'package:animate_do/animate_do.dart'; import 'package:fikoyt_mesaici/apps/mesaici/servisler/fikoyt.mesaici.service.dart'; // import 'package:device_info_plus/device_info_plus.dart'; import 'package:fikoyt_mesaici/core/Extensions/fiko_tarih.dart'; import 'package:fikoyt_ui/ui/ui.dart'; import 'package:flutter/material.dart'; import 'package:flutter_animate/flutter_animate.dart'; import 'package:get/get.dart' hide FormData; import 'package:path_provider/path_provider.dart'; // import 'package:get_storage/get_storage.dart'; // import 'package:mongo_dart/mongo_dart.dart' as MONGO; // import 'package:platform_device_id/platform_device_id.dart'; // import 'package:platform_device_id/platform_device_id.dart'; // import 'package:socket_io_client/socket_io_client.dart' as IO; import 'fikoyt.aktif_kullanici.dart'; import 'interface/fiko_dialog_ayarlari.dart'; import 'widgets/base_page/base_page_view.dart'; // import 'widgets/dakika_secici/duration_picker.dart'; class FikoYTService { // static final GetStorage ayarlar = GetStorage("ayarlar"); static GlobalKey navigatorKey = GlobalKey(); static AnimationController? animationController; // Rx? activeUser; static final servisMesaici = Get.put(FikoYTMesaiciService()); static String? uuid; static dynamic sistemBilgiler; static AktifKullanici aktifKullanici = AktifKullanici(); // static IO.Socket socket = IO.io( // 'https://fikoyt.com:8000', // IO.OptionBuilder() // .setTransports(['websocket']) // .enableReconnection() // .enableAutoConnect() // for Flutter or Dart VM // // .disableAutoConnect() // disable auto-connection // // .setExtraHeaders({'foo': 'bar'}) // optional // .build()); static sayfayaGit(Widget sayfa, dynamic mounted) async { BasePageLogic bpLogic = Get.put(BasePageLogic()); bpLogic.animationController?.reverse().then((data) { if (!mounted) { return; } bpLogic.children = [ sayfa, ]; bpLogic.topBarOpacity.value = 0; bpLogic.update(); }); } // static MONGO.Db mongo = // MONGO.Db("mongodb://fikri007:FikoYT1299@fikoyt.com:8000/fikoyt"); Future init() async { await FikoYTService.servisMesaici.init(); // await GetStorage.init(); // if (!kIsWeb) { // if (!kDebugMode) { // FikoYTService.uuid = await PlatformDeviceId.getDeviceId; // } else { // if (Platform.isAndroid) { // FikoYTService.uuid = await PlatformDeviceId.getDeviceId; //"Debug"; // } else if (Platform.isWindows) { // FikoYTService.uuid = "Debug"; // } // } // } // socket.connect(); // socket.onConnectError((data) => print(data)); /** */ // DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); // FikoYTService.sistemBilgiler = (await deviceInfo.deviceInfo).data; // FikoYTService.sistemBilgiler.keys.forEach((e) { // FikoYTService.sistemBilgiler[e] = FikoYTService.sistemBilgiler[e].toString(); // }); // dynamic cihaz = await FikoYTService.ayarlar.read("cihaz"); /** */ // if (cihaz != null) { // cihaz["uuid"] = FikoYTService.uuid; // } else { // cihaz = {"ismi": "Uygulama", "uuid": FikoYTService.uuid, "sistem_bilgiler": FikoYTService.sistemBilgiler}; // } // var formData = FormData(); // formData.fields.add( // MapEntry( // "req_body", // jsonEncode(cihaz).toString(), // ), // ); // Completer bekle = Completer.sync(); // istek_yap(komut: "FikoYT.nt.cihazlar.bul", parametreler: formData) // .listen((sonuc) async { // if (sonuc.turu == IstekOlayTuru.Cevaplandi) { // if (sonuc.sonuc != null) { // // print(sonuc.sonuc); // await FikoYTService.ayarlar.write("cihaz", sonuc.sonuc); // await FikoYTService.ayarlar.save(); // bekle.complete(); // } // } // }).onError((hata) async { // // print(hata.toString()); // bekle.complete(); // }); // await bekle.future; // db.createUser({ // user: "fikri007", // pwd: "FikoYT1299", // roles: [ { role: "userAdminAnyDatabase", db: "root" } ] // }) /** */ // DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); /** */ // await FikoYTService.mongo.open(); // if (kDebugMode) { // print(await FikoYTService.mongo.collection("hareketler").findOne()); // } // await FikoYTService.mongo.close(); /** */ return this; } static String dosyaBoyutu(dynamic boyut, [int yuvarla = 2]) { var divider = 1024; int size; try { size = int.parse(boyut.toString()); } catch (e) { throw ArgumentError('Değerde Hata Var: $e'); } if (size < divider) { return '$size B'; } if (size < divider * divider && size % divider == 0) { return '${(size / divider).toStringAsFixed(0)} KB'; } if (size < divider * divider) { return '${(size / divider).toStringAsFixed(yuvarla)} KB'; } if (size < divider * divider * divider && size % divider == 0) { return '${(size / (divider * divider)).toStringAsFixed(0)} MB'; } if (size < divider * divider * divider) { return '${(size / divider / divider).toStringAsFixed(yuvarla)} MB'; } if (size < divider * divider * divider * divider && size % divider == 0) { return '${(size / (divider * divider * divider)).toStringAsFixed(0)} GB'; } if (size < divider * divider * divider * divider) { return '${(size / divider / divider / divider).toStringAsFixed(yuvarla)} GB'; } if (size < divider * divider * divider * divider * divider && size % divider == 0) { num r = size / divider / divider / divider / divider; return '${r.toStringAsFixed(0)} TB'; } if (size < divider * divider * divider * divider * divider) { num r = size / divider / divider / divider / divider; return '${r.toStringAsFixed(yuvarla)} TB'; } if (size < divider * divider * divider * divider * divider * divider && size % divider == 0) { num r = size / divider / divider / divider / divider / divider; return '${r.toStringAsFixed(0)} PB'; } else { num r = size / divider / divider / divider / divider / divider; return '${r.toStringAsFixed(yuvarla)} PB'; } } static mongoBaglan() async { // if (FikoYTService.mongo.state != MONGO.State.open) { // return await FikoYTService.mongo.open(); // } } static girisYap() async { Completer bekle = Completer.sync(); // await FikoYTService.mongoBaglan(); // try { // if (kDebugMode) { // print(await FikoYTService.mongo.collection("uye").findOne()); // } // var kisi = await FikoYTService.mongo.collection("uye").findOne(); // bekle.complete(kisi); // } catch (e) { // bekle.completeError(e); // } // dynamic cihaz = await FikoYTService.ayarlar.read("cihaz"); // if (cihaz != null) { // cihaz["uuid"] = FikoYTService.uuid; // } else { // cihaz = {"ismi": "Uygulama", "uuid": FikoYTService.uuid, "sistem_bilgiler": FikoYTService.sistemBilgiler}; // } // var formData = FormData(); // formData.fields.add( // MapEntry( // "req_body", // jsonEncode(cihaz).toString(), // ), // ); // istek_yap(komut: "FikoYT.nt.cihazlar.bul", parametreler: formData).listen((sonuc) async { // if (sonuc.turu == IstekOlayTuru.Cevaplandi) { // if (sonuc.sonuc != null) { // // print(sonuc.sonuc); // // await FikoYTService.ayarlar.write("cihaz", sonuc.sonuc); // // await FikoYTService.ayarlar.save(); // bekle.complete(); // } // } // }).onError((hata) async { // // print(hata.toString()); // bekle.complete(); // }); return await bekle.future; } static Future dialogGoster(BuildContext context, Widget? icerik, FikoDialogAyarlari? ayarlar) { var ayar = ayarlar ?? FikoDialogAyarlari(); return showDialog( context: context, barrierDismissible: ayarlar?.arkaPlanaTiklanincaKapansin ?? true, builder: (_) => ElasticIn( child: FadeInUpBig( duration: Durations.short4, child: AlertDialog( insetPadding: const EdgeInsets.only(top: 42, left: 10, right: 10), titlePadding: const EdgeInsets.symmetric(horizontal: 0), contentPadding: const EdgeInsets.all(5), actionsPadding: const EdgeInsets.only(bottom: 5), alignment: ayar.konumlandirma, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.all( Radius.circular(5), ), ), scrollable: true, actionsAlignment: MainAxisAlignment.center, title: Column( mainAxisSize: MainAxisSize.min, children: [ Row( // mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, children: [ // if (ayar.baslik.runtimeType == IconData) // Icon( // ayar.baslikSimge, // size: 18, // ), if (ayar.baslik.runtimeType == String) Text( ayar.baslikSimge as String, style: TextStyle( fontSize: 18, color: Theme.of(context).extension()?.textColor, ), ), const SizedBox( width: 5, ), Expanded( child: Text( ayar.baslik, style: TextStyle( color: Theme.of(context).extension()?.textColor, fontSize: 16, decoration: TextDecoration.none, fontWeight: FontWeight.w500, ), ), ), if (ayar.baslikButonlar.isNotEmpty) ...List.from(ayar.baslikButonlar), MaterialButton( minWidth: 32, onPressed: () { Navigator.pop(context); }, color: Colors.red, textColor: Colors.white, padding: const EdgeInsets.all(3), shape: const CircleBorder(), child: const Icon(Icons.close, size: 20), ), ], ), const Divider(thickness: 1, height: 1), ], ), actions: [ Column( children: [ const Divider( height: 1, thickness: 1, ), SizedBox( height: 30, child: Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end, children: [ if (ayar.altButonlar.isNotEmpty) ...List.from(ayar.altButonlar), if (ayar.altButonlar.isEmpty) TextButton( onPressed: () { Navigator.pop(context); }, child: const Text( "Kapat", style: TextStyle(color: Colors.redAccent), ), ), ], ), ), ], ), ], content: SingleChildScrollView( child: Container( width: double.infinity, constraints: ayar.olculendirme, child: icerik ?? const SizedBox.shrink(), ), ), ).animate(effects: [ShimmerEffect(delay: 1000.ms)]), ), ), ); } static Future tarihSec( BuildContext context, { Widget? icerik, FikoDialogAyarlari? ayarlar, DateTime? varsayilanTarih, bool? tarihSilinebilsin = true, }) { var ayar = FikoDialogAyarlari( baslik: ayarlar?.baslik ?? "Tarih Seçiniz", baslikSimge: ayarlar?.baslikSimge ?? "🕙", altButonlar: ayarlar?.altButonlar, ); DateTime? rslt = varsayilanTarih; return showDialog( context: context, barrierDismissible: false, builder: (_) => ElasticIn( child: FadeInUpBig( duration: Durations.short4, child: AlertDialog( insetPadding: const EdgeInsets.only(top: 42), titlePadding: const EdgeInsets.symmetric(horizontal: 5), contentPadding: const EdgeInsets.all(5), actionsPadding: const EdgeInsets.only(bottom: 5), alignment: ayar.konumlandirma, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.all( Radius.circular(5), ), ), scrollable: true, actionsAlignment: MainAxisAlignment.center, title: Column( mainAxisSize: MainAxisSize.min, children: [ Row( // mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, children: [ // if (ayar.baslik.runtimeType == IconData) // Icon( // ayar.baslikSimge, // size: 18, // ), if (ayar.baslik.runtimeType == String) Text( ayar.baslikSimge as String, style: const TextStyle( fontSize: 18, ), ), const SizedBox( width: 5, ), Expanded( child: Text( ayar.baslik, style: const TextStyle( color: Colors.black, fontSize: 16, decoration: TextDecoration.none, fontWeight: FontWeight.w500, ), ), ), if (ayar.baslikButonlar.isNotEmpty) ...List.from(ayar.baslikButonlar), MaterialButton( minWidth: 32, onPressed: () { Navigator.pop(context, rslt); }, color: Colors.red, textColor: Colors.white, padding: const EdgeInsets.all(3), shape: const CircleBorder(), child: const Icon(Icons.close, size: 20), ), ], ), const Divider(thickness: 1, height: 1), ], ), actions: [ Column( children: [ const Divider( height: 1, thickness: 1, ), SizedBox( height: 30, child: Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end, children: ayar.altButonlar.isNotEmpty ? ayar.altButonlar : [ // if () ...List.from(ayar.altButonlar), // if (ayar.altButonlar.isEmpty) if (tarihSilinebilsin == true) TextButton( onPressed: () { rslt = null; Navigator.pop(context, null); }, child: const Text( "Tarihi Sil", style: TextStyle(color: Colors.redAccent), ), ), const Spacer(), TextButton( onPressed: () { Navigator.pop(context, rslt); }, child: const Text( "Tamam", style: TextStyle(color: Colors.redAccent), ), ), ], ), ), ], ), ], content: SingleChildScrollView( child: Column( children: [ Container( width: double.infinity, constraints: ayar.olculendirme, child: SizedBox( width: 200, height: 200, child: CalendarDatePicker( initialDate: varsayilanTarih ?? DateTime.now(), firstDate: DateTime(-10000), lastDate: DateTime(10000), currentDate: rslt, onDateChanged: (value) { rslt = value; }, ), ), ), ...?ayarlar?.icerik, ], ), ), ), ), ), ); } static Future saatSec( BuildContext context, { Widget? icerik, FikoDialogAyarlari? ayarlar, DateTime? varsayilanTarih, }) async { DateTime? rslt = varsayilanTarih; TimeOfDay? rsltdlg = await showDialog( context: context, barrierDismissible: false, builder: (_) => ElasticIn( child: FadeInUpBig( duration: Durations.short4, child: TimePickerDialog( initialTime: varsayilanTarih != null ? varsayilanTarih.gununSaati() : DateTime.now().gununSaati(), ), ), ), ); if (rsltdlg == null) return null; rslt ??= DateTime.now(); rslt = rslt.ayarlaGununSaati(rsltdlg); return rslt; } static Future sureSec( BuildContext context, { Widget? icerik, FikoDialogAyarlari? ayarlar, Duration? varsayilanSure, }) async { Duration? rslt = varsayilanSure ?? const Duration(microseconds: 0); Rx sureDlg = rslt.obs; Duration? rsltdlg = await dialogGoster( context, Column( children: [ SizedBox( width: 250, // height: 250, child: Obx( () => FikoYTDurationPicker( duration: sureDlg.value ?? const Duration(microseconds: 0), baseUnit: BaseUnit.minute, snapToMins: 0.1, onChange: (value) { sureDlg.value = value; rslt = value; }, ), ), ), ...List.from(ayarlar?.icerik ?? []), ], ), FikoDialogAyarlari( baslik: ayarlar?.baslik ?? "Süre Seç", baslikSimge: ayarlar?.baslikSimge, altButonlar: ayarlar?.altButonlar ?? [ TextButton( onPressed: () { rslt = null; Navigator.pop(context, null); }, child: const Text( "Süre Sil", style: TextStyle(color: Colors.redAccent), ), ), const Spacer(), TextButton( onPressed: () { rslt = sureDlg.value; Navigator.pop(context, rslt); }, child: const Text( "Kapat", style: TextStyle(color: Colors.redAccent), ), ), ]), ); if (rsltdlg == null) return sureDlg.value; return rsltdlg; } static Future sureSecSaniye( BuildContext context, { Widget? icerik, FikoDialogAyarlari? ayarlar, Duration? varsayilanSure, }) async { Duration? rslt = varsayilanSure ?? const Duration(microseconds: 0); Rx sureDlg = rslt.obs; Duration? rsltdlg = await dialogGoster( context, Column( children: [ SizedBox( width: 250, // height: 250, child: Obx( () => FikoYTDurationPicker( duration: sureDlg.value ?? const Duration(microseconds: 0), baseUnit: BaseUnit.second, snapToMins: 0.01, onChange: (value) { sureDlg.value = value; rslt = value; }, ), ), ), ...List.from(ayarlar?.icerik ?? []), ], ), FikoDialogAyarlari( baslik: ayarlar?.baslik ?? "Süre Seç", baslikSimge: ayarlar?.baslikSimge, altButonlar: ayarlar?.altButonlar ?? [ TextButton( onPressed: () { rslt = null; Navigator.pop(context, null); }, child: const Text( "Süre Sil", style: TextStyle(color: Colors.redAccent), ), ), const Spacer(), TextButton( onPressed: () { rslt = sureDlg.value; Navigator.pop(context, rslt); }, child: const Text( "Kapat", style: TextStyle(color: Colors.redAccent), ), ), ]), ); if (rsltdlg == null) return sureDlg.value; return rsltdlg; } static Future getCustomDirectoryWindows(String subDirectoryName) async { String executablePath; int lastSeparatorIndex; String executableDir; executablePath = Platform.resolvedExecutable; lastSeparatorIndex = executablePath.lastIndexOf(Platform.pathSeparator); executableDir = executablePath.substring(0, lastSeparatorIndex); // Uygulamanın belgeler dizinini al final directory = executableDir; // Alt klasörün yolunu oluştur final customDirectory = Directory('$directory${Platform.pathSeparator}$subDirectoryName'); // Eğer alt klasör mevcut değilse oluştur if (!await customDirectory.exists()) { await customDirectory.create(recursive: true); } return customDirectory; } static Future getCustomDirectoryAndroid(String subDirectoryName) async { // Uygulamanın belgeler dizinini al final directory = await getApplicationDocumentsDirectory(); // Alt klasörün yolunu oluştur final customDirectory = Directory('${directory.path}${Platform.pathSeparator}$subDirectoryName'); // Eğer alt klasör mevcut değilse oluştur if (!await customDirectory.exists()) { await customDirectory.create(recursive: true); } return customDirectory; } static Future programYolu({String ekYol = ""}) async { String executableDir; if (Platform.isWindows) { executableDir = (await getCustomDirectoryWindows(ekYol)).path + Platform.pathSeparator; } else if (Platform.isAndroid) { executableDir = (await getCustomDirectoryAndroid(ekYol)).path + Platform.pathSeparator; } else { executableDir = (await getCustomDirectoryAndroid(ekYol)).path + Platform.pathSeparator; } return executableDir; } } class Debouncer { final int milliseconds; Timer? _timer; Debouncer({required this.milliseconds}); void run(VoidCallback action) { if (_timer != null) { _timer!.cancel(); } _timer = Timer(Duration(milliseconds: milliseconds), action); } }