// ignore_for_file: constant_identifier_names, non_constant_identifier_names import 'dart:async'; import 'package:dio/dio.dart'; import 'package:fikoyt_finans/core/dio.dart'; import 'package:fikoyt_finans/core/fikoyt.service.dart'; import 'package:flutter/foundation.dart'; enum IstekOlayTuru { Beklemede, Hata, Isteniyor, Istendi, IlerlemeIstek, BaslikCevap, Cevaplaniyor, Cevaplandi, IlerlemeCevap, Ozel } class FikoHata { FikoHata({this.kategori, this.kod, this.baslik, this.mesaj, this.sistemMesaji}); String? kategori; double? kod; String? baslik; String? mesaj; String? sistemMesaji; } class FikoHatalar { FikoHatalar(); List liste = []; } class IstekIlerleme { IstekIlerleme({this.toplam, this.durum, this.yuzde}); int? toplam; int? durum; double? yuzde; } class CevapIlerleme { CevapIlerleme({this.toplam, this.durum, this.yuzde}); int? toplam; int? durum; double? yuzde; } abstract class IstekDurum { bool? hata; List? hatalar; } /// BİLGİ: Şimdilik Bir İşe Yaramıyor Ama Lazım Olur Diye Silmiyorum */ abstract class RequestSended { RequestSended({this.ismi, this.parametreler, this.form, this.kwargs, this.json}); String? ismi; dynamic parametreler; dynamic form; dynamic kwargs; dynamic json; } /// NOT: Sonuc İstekleri Standarda Bağlanıyor */ class IstekCevap { IstekCevap({this.sonuc, this.turu, this.durum, this.istekIlerleme, this.cevapIlerleme, this.hatalar, this.hata, this.istek}); IstekOlayTuru? turu; IstekIlerleme? istekIlerleme; CevapIlerleme? cevapIlerleme; IstekDurum? durum; RequestSended? istek; T? sonuc; bool? hata = false; FikoHatalar? hatalar; } Stream> istek_yap({String method = "POST", String? komut, dynamic parametreler = const {}}) { late StreamController> controller; late IstekCevap istekSonuc = IstekCevap(); // print(aktifKullanici.bilgiler?.value); void onListen() async { try { Response? cevap = await dio?.post("fapi/fikoyt.com.$komut", options: Options(headers: Map.from({"fikoak": "${FikoYTService.aktifKullanici.bilgiler?.value.id}"})), data: parametreler, onSendProgress: (int sent, int total) { if (sent < 1) { istekSonuc.turu = IstekOlayTuru.Isteniyor; controller.add(istekSonuc); } istekSonuc.istekIlerleme = IstekIlerleme(toplam: total, durum: sent, yuzde: (sent / total) * 100); controller.add(istekSonuc); if (sent + 1 >= total) { istekSonuc.turu = IstekOlayTuru.Istendi; controller.add(istekSonuc); } }, onReceiveProgress: (int count, int total) { if (count < 1) { istekSonuc.turu = IstekOlayTuru.Cevaplaniyor; controller.add(istekSonuc); } istekSonuc.cevapIlerleme = CevapIlerleme(toplam: total, durum: count, yuzde: (count / total) * 100); controller.add(istekSonuc); if (count + 1 >= total) {} }); istekSonuc.turu = IstekOlayTuru.Cevaplandi; istekSonuc.sonuc = cevap?.data; controller.add(istekSonuc); controller.close(); } catch (e) { if (kDebugMode) { print(e); } if (e is DioException) { if (e.response?.data is List) { FikoHatalar hatalar = FikoHatalar(); e.response?.data.forEach((element) { hatalar.liste.add(FikoHata(baslik: element["baslik"], mesaj: element["mesaj"])); }); controller.addError(hatalar); } else { FikoHatalar hatalar = FikoHatalar(); hatalar.liste.add(FikoHata(baslik: e.response?.data["baslik"], mesaj: e.response?.data["mesaj"])); controller.addError(hatalar); } } else { FikoHatalar hatalar = FikoHatalar(); hatalar.liste.add(FikoHata(baslik: "Bilinmeyen Hata", mesaj: e.toString())); controller.addError(hatalar); } controller.close(); } } controller = StreamController>(onListen: onListen); istekSonuc.turu = IstekOlayTuru.Beklemede; controller.add(istekSonuc); return controller.stream; }