// ignore_for_file: must_be_immutable, library_private_types_in_public_api, constant_identifier_names import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import '../../fikoyt.service.dart'; import '../../interface/fiko_dialog_ayarlari.dart'; class FikoYaziKutusu extends StatefulWidget { FikoYaziKutusu({super.key, kontrolcu, yaziBoyutu, maksGenislik, maksYukseklik, required this.baslik, gizli, this.simgeSol, this.oneriOtomatikDoldurma = const [], this.formatlayicilar, this.klavyeTipi, this.degisti, this.sonEk, this.degeri, this.aktif, radius}) : yaziBoyutu = yaziBoyutu ?? 14, maksGenislik = maksGenislik ?? 450, maksYukseklik = maksYukseklik ?? 30, gizli = gizli ?? false, radius = radius ?? 25; TextEditingController kontrolcu = TextEditingController(); double yaziBoyutu; double maksGenislik; double maksYukseklik; String baslik; final Widget? simgeSol; Widget? sonEk; Iterable? oneriOtomatikDoldurma = []; List? formatlayicilar = []; TextInputType? klavyeTipi; Function(String value)? degisti; bool gizli; String? degeri; final double radius; bool? aktif; @override State createState() => _FikoYaziKutusuState(); } class _FikoYaziKutusuState extends State { @override Widget build(BuildContext context) { widget.kontrolcu.text = widget.degeri ?? ""; return Center( child: Padding( padding: const EdgeInsets.symmetric(vertical: 0), child: ConstrainedBox( constraints: BoxConstraints( minHeight: 30, maxWidth: widget.maksGenislik, maxHeight: widget.maksYukseklik, ), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: TextFormField( scribbleEnabled: true, enabled: widget.aktif, controller: widget.kontrolcu, onChanged: (asd) { widget.kontrolcu.text = asd; // setState(() { // widget.kontrolcu.text = asd; // }); if (widget.degisti != null) widget.degisti!(asd); }, textInputAction: TextInputAction.next, inputFormatters: widget.formatlayicilar, keyboardType: widget.klavyeTipi, // initialValue: widget.kontrolcu.text, style: TextStyle(fontSize: widget.yaziBoyutu), autofillHints: widget.oneriOtomatikDoldurma, obscureText: widget.gizli, decoration: InputDecoration( contentPadding: const EdgeInsets.all(8.0), labelText: widget.baslik, // errorText: 'Error message', isDense: true, border: OutlineInputBorder(borderRadius: BorderRadius.all(Radius.circular(widget.radius))), prefixIconConstraints: const BoxConstraints(maxWidth: 24, minWidth: 24), prefixIcon: widget.simgeSol, suffix: widget.sonEk, ), autovalidateMode: AutovalidateMode.always, ), ), ), ), ); } @override dispose() { widget.kontrolcu.dispose(); super.dispose(); } } class FikoAciklamaKutusu extends StatelessWidget { FikoAciklamaKutusu({super.key, this.kontrolcu, yaziBoyutu, olculendirme, required this.baslik, gizli, this.simgeSol, this.oneriOtomatikDoldurma = const [], this.formatlayicilar, this.klavyeTipi, this.degisti, this.sonEk, this.degeri, radius}) : yaziBoyutu = yaziBoyutu ?? 14, gizli = gizli ?? false, radius = radius ?? 3, olculendirme = olculendirme ?? const BoxConstraints(minHeight: 30, maxWidth: 450); TextEditingController? kontrolcu; double yaziBoyutu; BoxConstraints? olculendirme; String baslik; final Widget? simgeSol; Widget? sonEk; Iterable? oneriOtomatikDoldurma = []; List? formatlayicilar = []; TextInputType? klavyeTipi; Function(String value)? degisti; bool gizli; final String? degeri; final double radius; @override Widget build(BuildContext context) { return Center( child: Padding( padding: const EdgeInsets.symmetric(vertical: 5), child: Container( constraints: olculendirme, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: TextFormField( controller: kontrolcu, onChanged: degisti, minLines: 3, maxLines: null, textInputAction: TextInputAction.newline, inputFormatters: formatlayicilar, keyboardType: klavyeTipi, initialValue: degeri, style: TextStyle(fontSize: yaziBoyutu), autofillHints: oneriOtomatikDoldurma, obscureText: gizli, decoration: InputDecoration( contentPadding: const EdgeInsets.all(8.0), labelText: baslik, floatingLabelBehavior: FloatingLabelBehavior.always, // errorText: 'Error message', isDense: true, border: OutlineInputBorder( borderRadius: BorderRadius.all( Radius.circular(radius), ), ), prefixIcon: simgeSol, suffix: sonEk, ), ), ), ), ), ); } } class FikoAcilirKutu extends StatelessWidget { FikoAcilirKutu({super.key, this.kontrolcu, this.yaziBoyutu, this.maksGenislik = 450, this.maksYukseklik = 30, required this.baslik, this.simgeSol, this.oneriOtomatikDoldurma = const [], this.formatlayicilar, this.klavyeTipi, this.liste, this.secim}); TextEditingController? kontrolcu; double? yaziBoyutu = 14; double? maksGenislik = 450; double? maksYukseklik = 30; String baslik; String? secim; IconData? simgeSol; Iterable? oneriOtomatikDoldurma = []; List? formatlayicilar = []; TextInputType? klavyeTipi; List>? liste = []; @override Widget build(BuildContext context) { return Center( child: Padding( padding: const EdgeInsets.symmetric(vertical: 5), child: ConstrainedBox( constraints: BoxConstraints(maxWidth: maksGenislik ?? 450, maxHeight: maksYukseklik ?? 30), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: DropdownButtonFormField( value: secim, onChanged: (String? val) { if (kontrolcu != null) { kontrolcu?.text = val!; secim = val; FocusScope.of(context).nextFocus(); } }, focusColor: Colors.transparent, isDense: true, isExpanded: true, items: [ DropdownMenuItem( value: baslik, enabled: false, child: Text( baslik, style: TextStyle(overflow: TextOverflow.ellipsis, fontSize: yaziBoyutu ?? 14), )), ...liste ?? [], ], style: TextStyle(fontSize: yaziBoyutu ?? 14, color: Colors.black), decoration: InputDecoration( contentPadding: const EdgeInsets.all(0.0), hoverColor: Colors.transparent, focusColor: Colors.transparent, filled: false, labelText: baslik, // errorText: 'Error message', isDense: true, border: const OutlineInputBorder(borderRadius: BorderRadius.all(Radius.circular(25))), prefixIcon: Icon( simgeSol ?? Icons.edit, size: 16, ), ), ), ), ), ), ); } } /// class FikoSecimKutusu extends StatefulWidget { final List liste; final List secilenler; final BoxConstraints olculendirme; final String baslik; final Function(dynamic deger)? degisti; FikoSecimKutusu({super.key, liste, secilenler, olculendirme, baslik, this.degisti}) : liste = liste ?? [], secilenler = secilenler ?? [], olculendirme = olculendirme ?? const BoxConstraints(maxWidth: 450), baslik = baslik ?? "Seçimler"; @override _FikoSecimKutusuState createState() => _FikoSecimKutusuState(); } class _FikoSecimKutusuState extends State { @override Widget build(BuildContext context) { return Center( child: Padding( padding: const EdgeInsets.symmetric(vertical: 5), child: ConstrainedBox( constraints: widget.olculendirme, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: InputDecorator( decoration: InputDecoration( labelText: widget.baslik, border: OutlineInputBorder( borderRadius: BorderRadius.circular(5.0), ), ), child: Material( color: Colors.transparent, child: Column( mainAxisSize: MainAxisSize.min, children: [ ListView.builder( shrinkWrap: true, itemCount: widget.secilenler.length, physics: const BouncingScrollPhysics(), itemBuilder: (context, index) { return ListTile( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(5), ), horizontalTitleGap: 0, minVerticalPadding: 0, contentPadding: const EdgeInsets.symmetric(horizontal: 3), visualDensity: const VisualDensity(horizontal: 0, vertical: -4), minLeadingWidth: 0, leading: const Icon(Icons.access_alarm_rounded), title: Text( "${index + 1} -) ${widget.secilenler[index]}", // softWrap: true, style: const TextStyle( fontWeight: FontWeight.w500, overflow: TextOverflow.ellipsis, ), ), selected: true, selectedTileColor: Colors.blue, selectedColor: Colors.white, dense: true, onTap: () { setState(() { if (widget.secilenler.contains(widget.secilenler[index])) { widget.secilenler.remove(widget.secilenler[index]); } else { // widget.secilenler.add(widget.liste[index]); } if (widget.degisti != null) { widget.degisti!(widget.secilenler[index]); } }); }, ); }, ), ListView.builder( shrinkWrap: true, itemCount: widget.liste.length, physics: const BouncingScrollPhysics(), itemBuilder: (context, index) { return Visibility( visible: !widget.secilenler.contains(widget.liste[index]), child: ListTile( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(5), ), horizontalTitleGap: 0, minVerticalPadding: 0, contentPadding: const EdgeInsets.symmetric(horizontal: 3), visualDensity: const VisualDensity(horizontal: 0, vertical: -4), minLeadingWidth: 0, leading: const Icon(Icons.access_alarm_rounded), title: Text( widget.liste[index], // softWrap: true, style: const TextStyle( fontWeight: FontWeight.w500, overflow: TextOverflow.ellipsis, ), ), selectedTileColor: Colors.blue, selectedColor: Colors.white, dense: true, onTap: () { setState(() { if (widget.secilenler.contains(widget.liste[index])) { // widget.secilenler.remove(widget.liste[index]); } else { widget.secilenler.add(widget.liste[index]); } if (widget.degisti != null) { widget.degisti!(widget.liste[index]); } }); }, ), ); }, ), ], ), ), ), ), ), ), ); } } /// /// class FikoTekliSecimKutusu extends StatefulWidget { final List liste; final BoxConstraints olculendirme; int? secilenIndex; final String baslik; final Function(dynamic deger)? degisti; FikoTekliSecimKutusu({super.key, liste, olculendirme, baslik, this.degisti, this.secilenIndex}) : liste = liste ?? [], // secilenIndex = secilenIndex ?? -1, olculendirme = olculendirme ?? const BoxConstraints(maxWidth: 450), baslik = baslik ?? "Seçimler"; @override _FikoTekliSecimKutusuState createState() => _FikoTekliSecimKutusuState(); } class _FikoTekliSecimKutusuState extends State { @override Widget build(BuildContext context) { return Center( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 0), child: ConstrainedBox( constraints: widget.olculendirme, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 0), child: InputDecorator( decoration: InputDecoration( contentPadding: const EdgeInsets.all(3.0), labelText: widget.baslik, border: OutlineInputBorder( borderRadius: BorderRadius.circular(5.0), ), ), child: Material( color: Colors.transparent, child: ListView.builder( shrinkWrap: false, itemCount: widget.liste.length, physics: const BouncingScrollPhysics(), itemBuilder: (context, index) { return ListTile( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(5), ), horizontalTitleGap: 0, minVerticalPadding: 0, contentPadding: const EdgeInsets.symmetric(horizontal: 0, vertical: 0), visualDensity: const VisualDensity(horizontal: 0, vertical: -4), minLeadingWidth: 0, leading: const Icon(Icons.access_alarm_rounded), title: Text( widget.liste[index], // softWrap: true, style: const TextStyle( fontWeight: FontWeight.w500, overflow: TextOverflow.ellipsis, ), ), selected: widget.secilenIndex == index, selectedTileColor: widget.secilenIndex == index ? Colors.blue : Colors.transparent, selectedColor: Colors.white, dense: true, onTap: () { setState(() { widget.secilenIndex = index; // print(index); }); if (widget.degisti != null) { widget.degisti!(widget.liste[index]); } }, ); }, ), ), ), ), ), ), ); } } /// class FikoButtonKutuDialog extends StatefulWidget { final String? baslik; final String? deger; final Widget? solSimge; final Widget sagSimge; final double maksYukseklik; final double maksGenislik; final Widget? diyalog; final FikoDialogAyarlari? diyalogAyarlari; final BoxConstraints diyalogOlculendirme; final Function()? tiklandi; final Function(dynamic deger)? degisti; FikoButtonKutuDialog({super.key, liste, secilenler, this.baslik, this.deger, this.tiklandi, maksYukseklik, maksGenislik, this.solSimge, this.diyalog, this.degisti, diyalogOlculendirme, diyalogAyarlari, sagSimge}) : maksYukseklik = maksYukseklik ?? 30.0, maksGenislik = maksGenislik ?? 450, sagSimge = sagSimge ?? const Icon(Icons.arrow_drop_down), diyalogOlculendirme = diyalogOlculendirme ?? const BoxConstraints(maxHeight: 350, maxWidth: 550), diyalogAyarlari = diyalogAyarlari ?? FikoDialogAyarlari(); @override _FikoButtonKutuDialogState createState() => _FikoButtonKutuDialogState(); } class _FikoButtonKutuDialogState extends State { @override Widget build(BuildContext context) { return Center( child: Padding( padding: const EdgeInsets.symmetric(vertical: 5), child: ConstrainedBox( constraints: BoxConstraints(maxWidth: widget.maksGenislik, maxHeight: widget.maksYukseklik), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: MouseRegion( cursor: SystemMouseCursors.click, child: Material( color: Colors.transparent, child: InkWell( borderRadius: const BorderRadius.all(Radius.circular(25)), // splashColor: Colors.yellow, onTap: () { if (widget.tiklandi != null) { widget.tiklandi!(); } if (widget.diyalog != null) { FikoYTService.dialogGoster(context, widget.diyalog, widget.diyalogAyarlari).then((value) { // if (widget.degisti != null) { widget.degisti!(value); // } }); } }, child: InputDecorator( isEmpty: widget.deger == null, decoration: InputDecoration( labelStyle: const TextStyle(fontSize: 14), labelText: widget.baslik, border: OutlineInputBorder( borderRadius: BorderRadius.circular(25.0), ), // enabledBorder: OutlineInputBorder( // borderRadius: BorderRadius.circular(25.0), // borderSide: const BorderSide(color: Colors.yellow), // ), isDense: true, contentPadding: const EdgeInsets.symmetric(horizontal: 5), prefixIcon: widget.solSimge, suffixIcon: widget.sagSimge, ), child: Text( widget.deger ?? "", maxLines: 1, textAlign: TextAlign.start, overflow: TextOverflow.ellipsis, ), ), ), ), ), ), ), ), ); } } /// enum FikoResimKutusuTuru { HATALI, YERLESIK, AG, YEREL } class FikoResimKutusu extends StatefulWidget { final BoxConstraints olculendirme; String resim; final BoxShape sekil; final bool cerceve; final BoxFit sigdirDoldur; FikoResimKutusuTuru resimKutusuTuru = FikoResimKutusuTuru.HATALI; FikoResimKutusu({super.key, olculendirme, required this.resim, sekil, this.cerceve = false, this.sigdirDoldur = BoxFit.contain}) : olculendirme = olculendirme ?? const BoxConstraints(maxHeight: 128, maxWidth: 128), sekil = sekil ?? BoxShape.circle; @override State createState() => _FikoResimKutusuState(); } class _FikoResimKutusuState extends State { @override Widget build(BuildContext context) { return Container( constraints: widget.olculendirme, decoration: BoxDecoration( border: widget.cerceve ? Border.all( color: Colors.blueGrey.shade100, width: 1, ) : null, image: DecorationImage(image: widgetAl().image, fit: widget.sigdirDoldur, alignment: Alignment.center), shape: widget.sekil, ), //BoxDecoration //Container//Center ); } widgetAl() { if (widget.resim.startsWith("assets")) { widget.resimKutusuTuru = FikoResimKutusuTuru.YERLESIK; } else if (File(widget.resim).existsSync()) { widget.resimKutusuTuru = FikoResimKutusuTuru.YEREL; } else if (widget.resim.startsWith("http")) { widget.resimKutusuTuru = FikoResimKutusuTuru.AG; } else { widget.resimKutusuTuru = FikoResimKutusuTuru.HATALI; } switch (widget.resimKutusuTuru) { case FikoResimKutusuTuru.AG: return Image.network( widget.resim, fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) { setState(() { widget.resimKutusuTuru = FikoResimKutusuTuru.HATALI; }); return const SizedBox.shrink(); }, ); case FikoResimKutusuTuru.YERLESIK: return Image.asset( widget.resim, fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) { setState(() { widget.resimKutusuTuru = FikoResimKutusuTuru.HATALI; }); return const SizedBox.shrink(); }, ); case FikoResimKutusuTuru.YEREL: return Image.file( File(widget.resim), fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) { setState(() { widget.resimKutusuTuru = FikoResimKutusuTuru.HATALI; }); return const SizedBox.shrink(); }, ); case FikoResimKutusuTuru.HATALI: return Image.asset( "assets/tablet.png", fit: BoxFit.cover, errorBuilder: (context, error, stackTrace) { setState(() { widget.resimKutusuTuru = FikoResimKutusuTuru.HATALI; }); return const SizedBox.shrink(); }, ); } } }