1. const
tanımını gerekli bütün yerlerde kullanın.
const
tanımını kullanarak gereksiz widget tekrar oluşturma işlemlerini engelleyiniz.
YAPMAYIN |
YAPIN |
Column(
children: [
Text('One'),
Text('Two'),
],
)
|
Column(
children: const [
Text('One'),
Text('Two'),
],
)
|
2. Widget ağacını ortaya çıkarmak için virgül kullanın.
Kodun okunabilirliğini artırmak için girintileri kullanın.
YAPMAYIN |
YAPIN |
@override
Widget build(BuildContext context) {
return const Scaffold(body: Center(child: Text('One')));
}
|
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Center(
child: Text('One'),
),
);
}
|
3. Dosya, değişken ve sınıfları adlandırırken PascalCase kullanın.
Dart programlama diline göre dosya, değişken ve sınıflarınızı adlandırın. Dart, PascalCase kullanmaktadır.
YAPMAYIN |
YAPIN |
class myApp {
}
|
class MyApp {
// ...
}
|
4. Doğru widget’ı kullandığınızdan emin olun.
Widget’ları seçerken akıllıca seçin. Örneğin sadece boşluk kullanımı için Container
yerine Padding
kullanın.
YAPMAYIN |
YAPIN |
Container(
padding: const EdgeInsets.all(8),
child: const Text("Hello"),
)
|
const Padding(
padding: EdgeInsets.all(8),
child: Text("Hello"),
)
|
5. Gereken her yerde private değişkeni/yöntem kullanın.
Açığa çıkarmak istemediğiniz her yöntem/değişkende private tanımını kullanın.
YAPMAYIN |
YAPIN |
class Student {
String name;
String address;
|
class Student {
String _name;
String _address; Student({
required String name,
required String address,
}) : _name = name,
_address = address;
}
|
6. Gereksiz Widget öğesi kullanımından kaçının.
YAPMAYIN |
YAPIN |
Column(
children: [
Text(_textValue),
ElevatedButton(
onPressed: () {
setState(() {
_textValue = "new value";
});
},
child: Text('Update'),
),
],
)
|
Column(
children: [
// ... other widgets
NewWidgetWithTextAndButton(),
// ... other widgets
],
)
|
7. İç içe geçmiş widget’ları ayırın, derinleştirmeyin.
YAPMAYIN |
YAPIN |
Column(
children: [
Container(
),
Container(
),
],
)
|
Column(
children: [
FirstLengthyCodeWidget(),
SecondLengthyCodeWidget(),
// ... other widgets
],
)
|
8. Yöntemleri widget’lardan hariç tanımlayın.
YAPMAYIN |
YAPIN |
Widget build(BuildContext context) {
return Scaffold(
body: ElevatedButton(
onPressed: () {
},
child: const Text('Do some task'),
),
);
}
|
Widget build(BuildContext context) {
return Scaffold(
body: ElevatedButton(
onPressed: _callTheListener,
child: const Text('Do some task'),
),
);
}void _callTheListener() {
// ... your code here
}
|
9. Gerekmedikçe Null kullanmayın.
YAPMAYIN |
YAPIN |
TextEditingController? textEditingController;
|
initState() {
super.initState();
textEditingController = TextEditingController();
}
late TextEditingController textEditingController;@override
initState() {
super.initState();
textEditingController = TextEditingController();
}
|
10.cascade (..)
and spread operator (...)
var paint = Paint()
..color = Colors.black
..strokeCap = StrokeCap.round
..strokeWidth = 5.0;// Spread operator (...)
@override
Widget build(BuildContext context) {
bool isTrue = true;
return Scaffold(
body: Column(
children: [
if (isTrue) ...[
const Text('One'),
const Text('Two'),
const Text('Three'),
]
],
),
);
}
11. themes ve routes ayrı dosyalarda tanımlayın.
YAPMAYIN |
YAPIN |
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const HomePage(),
);
}
|
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: appTheme,
home: const HomePage(),
);
}// In a new file, add your theme
var appTheme = ThemeData(
primarySwatch: Colors.blue,
// ... other properties
);
|
12. Koda gömülü (hardcoded) metinlerden kaçıının.
YAPMAYIN |
YAPIN |
Text('One')
|
Text(AppLocalizations.of(context)!.one)
|
13. Koda gömülü (hardcoded) stillerden kaçıının.
YAPMAYIN |
YAPIN |
Column(
children: const [
Text(
'One',
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.normal,
),
),
Text(
'Two',
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.normal,
),
),
],
)
|
Column(
children: [
Text(
'One',
style: Theme.of(context).textTheme.subtitle1,
),
Text(
'Two',
style: Theme.of(context).textTheme.subtitle1,
),
],
)
|
14. İlişkisel paket dahil etme kullanın.
YAPMAYIN |
YAPIN |
import 'package:flutter/material.dart';
import 'package:test_project/student.dart';
|
import 'package:flutter/material.dart';
import 'model/student.dart';
|
15. Gereksiz Widget oluşturmamak için StatelessWidget tercih edin.
YAPMAYIN |
YAPIN |
class TestWidget extends StatefulWidget {
const TestWidget({Key? key}) : super(key: key);
@override
State<TestWidget> createState() => _TestWidgetState();
}
|
class TestWidget extends StatelessWidget {
const TestWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
// ... stateless content
return Image.asset('assets/men_walking.png');
}
}
|
16. Records kullanarak birden çok öğenin döndürülmesini kolaylaştırın.
YAPMAYIN |
YAPIN |
String getPersonName(Map<String, dynamic> json) {
return json['name'];
}
|
String getPersonAge(Map<String, dynamic> json) {
return json['age'];
}// ✅ Do
(String, int) getPersonDetail(Map<String, dynamic> json) {
return (
json['name'],
json['age'],
);
}
|
17. Temiz ve düzenli kod için gelişmiş switch yapısı kullanın.
YAPMAYIN |
YAPIN |
enum Type {
kid,
teen,
adult;
int get discount {
switch (this) {
case kid:
return 30;
case teen:
return 20;
case adult:
return 5;
}
}
}
|
void main() {
print(Type.kid.discount);
}// ✅ Do
enum Type {
kid,
teen,
adult;
int get discount => switch (this) {
kid => 30,
teen => 20,
adult => 5,
};
}void main() {
print(Type.kid.discount);
}
|