Flutter Paket Geliştirme

Enes Karaosman
Etiya
Published in
3 min readSep 10, 2021
Photo by Nubelson Fernandes on Unsplash

Paketin kapsamından bir önceki yazıda da bahsetmiştik (Flutter Package kullanımı), kısaca hatırlamak gerekirse modüler olarak kolayca paylaşılabilir kodlar yazmak için kullanıyoruz diyebiliriz.

Bir paketin paket olabilmesi için pubspec.yaml dosyası ve lib klasörü barındırması gerekiyor.

  • lib klasöründe paketimizin kod dosyaları bulunur, genellikle paketten dış kullanıma açılacak kodlar, paket ismine sahip dart dosyası ile yapılıyor. Yani bu (tek) dosya içerisinde ilgili exportlar toplanıyor.

Hatta görselde görüldüğü gibi, lib klasörü içerisinde bir src klasörü altında paket kodlarını barındırmak da community tarafından benimsenmiş bir yaklaşımdır.

swifty_chat.dart dosyası (paketin ana dosyası) ise şu şekilde olabilir;

library swifty_chat;export 'package:swifty_chat_data/swifty_chat_data.dart';export 'src/chat.dart' show Chat;
export 'src/chat_input_field.dart';
export 'src/extensions/keys.dart';
export 'src/message_cell_size_configurator.dart';
export 'src/theme/chat_theme.dart';
export 'src/theme/default_theme.dart';

Sadece istediğimiz dosyaları, hatta bir dosyanın sadece bir sınıfını dış kullanıma açabiliriz.

Bu kısıtlamalar ile alakalı şu link faydalı olacaktır.

Flutter core dosyalarından biri olan material.dart dosyasına IDE’nizden gidip bahsettiğimiz yaklaşımı oradan da inceleyebilirsiniz.

  • pubspec.yaml dosyasına gelince, bu dosya olmalı ki başka bir paket ya da uygulama tarafından paketimiz eklenebilsin.

Tekrardan pubspec dosyasının görünümünü hatırlamak istersek;

name: package_name
description: Package Description here..
version: 0.0.1
environment:
sdk: ">=2.12.0 <3.0.0"
dependencies:
flutter:
sdk: flutter

dev_dependencies:
flutter_test:
sdk: flutter

kabaca bu şekilde olabilir.

Paket türleri

Yine önceki yazımızda plugin in de aslında bir paket türü olduğundan bahsetmiştik.

Dolayısıyla Dart ve Plugin paketleri olarak türlerimizi ikiye ayırabiliriz.

1. Paket oluşturma

flutter create --template=package swifty_chat

Bu komut swifty_chat isminde bir paket oluşturur, ve bu kapsamda aşağıdaki gibi bazı dosyalar otomatik olarak paketinize eklenecektir, kabaca bunlar hakkında bilgi paylaşalım.

  • LICENCE

Varsayılan olarak boş geliyor, buraya paketin kapsamına göre bir lisans ekleyebilirsiniz. Eğer paketinizi GitHub üzerinde saklayacak olursanız, otomatik olarak templatelerden faydalanabilirsiniz.

  • test/swifty_chat_test.dart

Unit testlerin barındırıldığı dosya.

  • swifty_chat.iml & .idea

IntelliJ IDEleri tarafından kullanılan bir konfigürasyon dosyalarıdır.

  • .gitignore

Hangi dosya ya da klasörün Git kapsamına dahil edilmemesini bildirmemizi sağlayan gizli bir dosyadır.

  • .metadata

IDEler tarafından Flutter projesinin bazı özelliklerini takip için kullanılan gizli bir dosyadır.

  • pubspec.yaml

Paketin bağımlı olduğu başka paketleri ve bir takım özellikleri ayalayabildiğimiz dosyadır.

  • README.md

Paketin amacını özetle izah eden bir markdown dosyasıdır.

  • lib/swifty_chat.dart

Başka paketler tarafından import edilecek şekilde tasarlanan bir dosyadan yukarıda bahsetmiştik, işte bu o dosyadır.

  • CHANGELOG.md

Paketin yeni sürümünü geliştirdikçe ilgili değişikliklerin takibi amacıyla oluşturulmuş bir markdown dosyasıdır.

analysis_options.yaml dosyasıda Flutter 2.5.0 sürümü ile birlikte varsayılan olarak eklenmektedir, statik kod analizi için eklenen lint kütüphanesinin kullandığı bir konfigürasyon dosyasıdır.

Bu kısımdan sonrası geliştirmek istediğiniz içeriğe göre yazacağınız kodlardan ibaret, hala nasıl ilerleyeciğiniz konusunda güçlük çekiyorsanız https://github.com/EnesKaraosman/swifty_chat şahsi paketimi inceleyebilirsiniz, sorularınız için de GitHub ya da LinkedIn üzerinden irtibata geçebilirsiniz.

Paket geliştirme aşamasında tavsiye etmeden geçmeyeceğim bir konu da bir example projeyi pakete dahil etmeniz, paketinizi bu projeye local dependency olarak ekleyebilirsiniz. Böylelikle hem geliştirme yapıp hem de bu örnek proje üzerinden geliştirmeleri hızlıca kontrol edebilirsiniz. Paylaştığım örnek repositoryde bu da mevcut.

--

--