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),
),
),