Dikkat Edilmesi Gerekenler

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: [
    // ... other widgets
    Text(_textValue),
    ElevatedButton(
      onPressed: () {
        setState(() {
          _textValue = "new value";
        });
      },
      child: Text('Update'),
    ),
    // ... other widgets
  ],
)
Column(
  children: [
    // ... other widgets
    NewWidgetWithTextAndButton(),
    // ... other widgets
  ],
)

7. İç içe geçmiş widget’ları ayırın, derinleştirmeyin.

YAPMAYIN YAPIN
Column(
  children: [
    Container(
      // ... lengthy code
    ),
    Container(
      // ... lengthy code
    ),
    // ... lengthy code
  ],
)
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: () {
        // ... lengthy code
      },
      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 (...)

// Cascade 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,
      // ... other properties
    ),
    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);
}