🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / FLUTTER / içerden dışarıya Function onclick interface gibi tetikleme class ve widget kullanımı

1-) FLUTTER - içerden dışarıya Function onclick interface gibi tetikleme class ve widget kullanımı

 

  Örnek olarak anlatırsam. bir tane tarih seç widgetim var. bunları tüm sayfalarda onlarca kod yazmak yerine . tek bir class a yazarım. ve içine function göndererim. bu function dışarıya veri aktarmamıza yarıyacak. bu sayede interface gibi kullanırım. tüm sayfalarda bu class ı çağırırım ve kod kalabalığından kurtulurum..

 

1-) WİDGET İLE

 

ButtonGonder.dart

 

import 'package:flutter/material.dart';
class ButtonGonder extends StatefulWidget {
  
final Function onClick;
  
const ButtonGonder({required this.onClick,Key? key}) : super(key: key);
  
@override
  
State<ButtonGonder> createState() => _ButtonGonderState();
}

class _ButtonGonderState extends State<ButtonGonder> {
  
@override
  
Widget build(BuildContext context) {
    
return Padding(
      padding:
EdgeInsets.only(top: 10),
      child:
Align(
        alignment:
Alignment.centerRight,
        child:
Container(
          margin:
const EdgeInsets.only(right: 15),
          height:
50,
          width:
50,
          decoration:
BoxDecoration(
            boxShadow: [
              
BoxShadow(
                color:
Colors.green[200]!.withOpacity(0.5),
                spreadRadius:
5,
                blurRadius:
7,
                offset:
const Offset(0, 3),
              ),
            ],
            shape:
BoxShape.circle,
            gradient:
const LinearGradient(
              begin:
Alignment.centerLeft,
              end:
Alignment.centerRight,
              colors: [
                
Color(0xff1bccba),
                
Color(0xff22e2ab),
              ],
            ),
          ),
          child:
new IconButton(
            onPressed: () {
              
widget.onClick();
            },
            icon:
new Icon(Icons.arrow_forward_outlined),
          ),
        ),
      ),
    );
  }
}

KULLANIMI :

 

ButtonGonder(
  onClick: () {
    
EasyLoading.showToast("Gönderildi...");
  },
)

 

 

 

2-) CLASS İLE

 

TarihSecWidget.dart

 

import 'package:date_format/date_format.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';

class TarihSecWidget {
  
String secilenTarih = "";

  
int yil = 2022;
  
int ay = 03;
  
int gun = 03;

  
late DateTime secilenTar;

  
TarihSecWidget([DateTime? secilenTar = null]) {
    
// TarihSecWidget tar = new TarihSecWidget(DateTime.now()) veya DateTime(1980, 01, 01);

    
if (secilenTar == null) {
      
DateTime suan =DateTime.now();
      
secilenTarih = formatDate(suan, [yyyy, '-', mm, '-', dd]);
      
yil = suan.year;
      
ay = suan.month;
      
gun = suan.day;
    }
else {
      
secilenTarih = formatDate(secilenTar, [yyyy, '-', mm, '-', dd]);
      
yil = secilenTar.year;
      
ay = secilenTar.month;
      
gun = secilenTar.day;
    }

  }

  
void showDatePicker(ctx, Function onClick) {
    
// showCupertinoModalPopup is a built-in function of the cupertino library

    
if (secilenTarih == "") {
      
secilenTarih = " ";
    }

    showCupertinoModalPopup(
      context: ctx,
      builder: (_) =>
Container(
        height:
300,
        color:
const Color.fromARGB(255, 255, 255, 255),
        child:
Column(
          children: [
            
SizedBox(
              height:
200,
              child:
CupertinoDatePicker(
                mode:
CupertinoDatePickerMode.date,
                initialDateTime:
DateTime(yil, ay, gun),
                onDateTimeChanged: (value) {
                  print(value.toString());
                  print(formatDate(value, [
yyyy, '-', mm, '-', dd]));
                  
secilenTarih = formatDate(value, [yyyy, '-', mm, '-', dd]);

                  
EasyLoading.showToast(secilenTarih);

                  onClick(
secilenTarih);
                },
              ),
            ),

            
// Close the modal
            
CupertinoButton(
              child:
const Text('OK'),
              onPressed: () {
                
if (secilenTarih.trim() == "") {
                  
secilenTarih = formatDate(DateTime.now(), [yyyy, '-', mm, '-', dd]);
                }

                
EasyLoading.showToast(secilenTarih);

                onClick(
secilenTarih);

                
Navigator.of(ctx).pop();
              },
            )
          ],
        ),
      ),
    );
  }
}

 

KULLANIMI :

 

TarihSecWidget tar = new TarihSecWidget(); // VARSAYILAN BUGUN DÜR
tar.showDatePicker(context, (secilenTarih) {
  setState(() {
    
dogumTar.text = secilenTarih;
  });
});

 

VEYA

 

TarihSecWidget tar = new TarihSecWidget(DateTime(1980, 01, 01));
tar.showDatePicker(context, (secilenTarih) {
  setState(() {
    
dogumTar.text = secilenTarih;
  });
});

 

DİĞER KOD

 

late TextEditingController dogumTar;

@override
void initState() {
 
 super.initState();
  
dogumTar = new TextEditingController();

//dogumTar = new TextEditingController(text:formatDate(DateTime.now(), [yyyy, '-', mm, '-', dd]));


}

 

TextFormField(
  controller:
dogumTar,
  onTap: () {
    
// Below line stops keyboard from appearing
    
FocusScope.of(context)
        .requestFocus(
new FocusNode());

    
EasyLoading.showToast("tıkladım");

    
// _showDatePicker(context);
  
TarihSecWidget tar = new TarihSecWidget(DateTime(1980, 01, 01));
tar.showDatePicker(context, (secilenTarih) {
  setState(() {
    
dogumTar.text = secilenTarih;
  });
});




  },

  style:
TextStyle(
      fontSize:
17, fontWeight: FontWeight.bold),
  keyboardType:
TextInputType.emailAddress,
  decoration:
InputDecoration(
    labelText:
LocaleKeys.dogumtarihiniseciniz.tr(),
    border:
OutlineInputBorder(),
    labelStyle:
TextStyle(fontSize: 13),
  ),
),

 

 2022 Mart 13 Pazar
 356