Grisoft Code Challange
lib klasörü içine components, language, screens, services ve theme adında klasörler oluşturularak ilgili dosyalar bu klasörler altında tutulmuştur. components klasöründe her yerde kullanılabilecek buton widget'ı ve snackbar fonksiyonu bulunmaktadır. language.dart dosyasında uygulamada kullanılan yazılar Türkçe ve İngilizce dilleri ile tanımlanmıştır. screens klasöründe uygulamada kullanılan ekranlar bulunmaktadır. services klasöründe API işlemlerinin yapıldığı api.dart dosyası vardır. theme.dart dosyasında ise uygulamada kullanılan renkler tanımlanmıştır.
Uygulama main.dart dosyasındaki main fonksiyonuyla başlamaktadır ve burada MyApp adlı widget çalıştırılmıştır. home parametresine ise gösterilecek ilk ekran olan MainScreen ekranı yazılmıştır.
MaterialApp yerine GetX kütüphanesine ait GetMaterialApp kullanıldı. GetX state management, navigation manager, internationalization ve tema kullanımı desteği sağlayan bir kütüphanedir. Bu projede kullanılmasının sebebi, yazıların cihaz diline göre ayarlanması istenmesidir. Tek sayfalık bir proje olduğu için route ve state management kullanılamamıştır ancak kullanılan projelerde verim alınan bir kütüphanedir.
Uygulamada tek ekran bulunmaktadır. Widget boyutlarının kullanılan ekran boyutuna göre ayarlanmasında ekran boyutunu almak için MediaQuery.of(context).size kullanılmıştır.
shape.svg, link kısaltmak için bulunan TextFormField ve buton her durumda gösterilmiştir. TextField ve buton form widget'ı içinde kullanılarak validation işleminin yapılması sağlanarak TextFormField alanı boş olduğunda uyarı verdirilmiştir.
Eğer kısaltılmış link bulunmuyorsa boş olan ekran gösterilmiştir. Kısaltılmış link varsa Link History olarak linklerin listesi gösterilmiştir. Kısaltılmış linklerin listelenmesi için ListView.builder kullanılmıştır.
svg uzantılı dosyaları göstermek için flutter_svg kütüphanesi kullanılmıştır.
shrtcode API'ye bağlantı sağlamak için http kütüphanesi kullanılmıştır. http.get fonksiyonuna kısaltılması istenen url gönderilerek dönen response try-catch kullanılarak herhangi bir hata olması durumu göz önünde bulundurularak fonksiyona geri gönderilmiştir.
Butona tıklanıldığında getShortLink() fonksiyonu çalışmaktadır. Bu fonksiyonda API isteği yapılıp gelen sonuca göre kısaltılmış link bulunuyorsa Link History kısmında gösterilecek kısaltılmış linklerin tutulduğu shortLinkArray listesine eklenmesi işlemleri yapılmıştır.
copyLink() fonksiyonu kısaltılmış linkleri kopyalamak için, deleteLink() fonksiyonu listede bulunan kısaltılmış linki silmek için kullanılmıştır.
Kullanılan Kütüphaneler
- get
- flutter_svg
- http