Arena City’e bakan apartmanın balkonundan bir resim

Kızlar

Bu maddeyi eklemesem bir şeyleri saklıyor gibi hissederdim, zaten Kyiv’de yaşayacaksanız ve orayı beğendiyseniz, Türkiye’deki arkadaşlarınıza veya orada tanıştığınız insanlara bu kararınızı savunmanız ve aklamanız gerekiyor, kızların güzelliğini duymadan da sizi rahat bırakmıyorlar. Sebebi ise kendi şehirlerini ülkelerini pek beğenmiyorlar ve bu radikal kararınızı garipsiyor oluşları. O yüzden en başa ekliyorum. Ülkenin %95'i benim tipim sanırım. Sarışın mavi gözlü güzel yüzlü kızlardan bahsediyorum. Bakımlı ve şıklar, her yerdeler.

Ulaşım, akıllı şehir ve Uber

Metrosu epey popüler ve Apple Pay, Google Pay kullanabiliyorsunuz metroda. Apple Watch ile toplu ulaşım kullanabilmek muazzam, bu noktada dijital göçebeler ağlıyordur. Otobüs ya da tramvay denemedim. Şehirde sanırım en az üç…


Photo credit: Osman Rana

Neyi çözmek istiyoruz?

Bir sınıfın görevinin sadece veri taşımak olduğu durumlarda, mesela BLoC’ta kullandığınız bir event sınıfı veya kullanıcı giriş yaptığında verilerini tutacağımız User sınıfı, çok fazla tekrar eden sıkıcı kodlar yazmak durumunda kalıyoruz. Constructor yazıyoruz, bu sınıfın iki objesi eşit mi diye bakmak için equals() yazıyoruz, 1–2 field değiştirip yeni bir obje yaratmak istediğimizde lazım olacak copyWith() metodunu yazıyoruz, güzel güzel loglamak istiyorsak toString() yazıyoruz.

Bunları yazdırmak çok büyük bir sıkıntı değil bana göre, bir VSCode eklentisi de bunu sizin için yapar.

Fakat tek görevi x, y ve z değerlerini taşımak olan Point diye bir sınıf düşünelim. İçinde tonla metod var ve…


Photo by jcomp

Yerçekimi Animasyonu

Gravity Animation Dart Pad

Bu örnek aslında serinin bir önceki yazısındaki AnimatedPositioned örneğimize benziyor. Stack ve Positioned widget’ları var ve cisimlerin Stack içindeki konumunu değiştiriyoruz. Bunun için de Positioned widget’ının top parametresine animasyonun değerini veriyoruz.

Yukarıdan aşağıya düşen 2 kare için 2 farklı AnimationController ve 2 farklı GravitySimulation var. Yerçekimi simülasyonu yaratırken ivme(acceleration), başlangıç ve bitiş noktaları(starting point, end point) ve başlangıç hızı(starting velocity)’na ihtiyacımız var. 4 değer de double cinsinde. AnimationController sonrasında bu simülasyonu kullanarak yerçekimi animasyonunu sağlayacak. Örnekte verdiğim iki GravitySimulation arasında sadece acceleration farklı, yani ivmelenmeleri farklı olacak ve ivmesi büyük olan daha hızlı düşecek. AnimationController’a…


Animasyonların güzel olduğu kadar işlevsel olduğunu da biliyor muydunuz? Animasyonlar ile kullanıcılarınıza anlamlı geribildirimler verebilirsiniz, onların odağını istediğiniz bir yere yönlendirebilirsiniz, uygulamadaki bir sonraki adım için ipucu verebilirsiniz veya ekranda olan değişiklikleri daha kolay görülmeleri için belirtebilirsiniz. Güzel olduklarından zaten bahsetmiştik, haydi başlayalım.

Implicit Animation Widgets

Flutter’da animasyon kullanmanın en kolay yolu bu widget’lar. Animasyonlar hakkında birşey neredeyse hiçbir şey bilmenize gerek yok.

Flutter’la biraz uğraştıysanız aşağı yukarı herşeyin widget olduğunu fark etmişsinizdir. Opaklığı mı değiştirmek istiyorsunuz, Opacity widget’ı var, Padding mi eklemek istiyorsunuz, Padding widget’ı var.

Implicit Animation Widgets, (Türkçemize Örtülü Animasyon Widget’ları diye çevirebiliriz belki, sadece bir öneri) üstte saydığım ve…


Dart 2.6'nın çıkmasına az bir süre kaldı, ama bu dev kanalına geçip Dart’ın yeni özellikleriyle oynayamayacağımız anlamına gelmiyor.

Bu kısa bir yazı olacak, o yüzden hemen küçük bir örnek ile başlıyorum.

Dart dilinde bir listenin ilk elemanını .first özelliği(property) ile alabiliyoruz fakat String tipinde böyle birşey yok.

// 'hello'[0] ile alabiliriz tabii ama örneğin selameti için biz biraz işleri karıştıralım.

String’ler üzerinde kullanacağınız böyle küçük rutin görevleri yapan metotlarınız varsa muhtemelen projenizde bunları tuttuğunuz böyle bir sınıfınız vardır:

abstract class StringUtils {...
static String first(String str) => str[0];
...
}print(StringUtils.first('hello')); // h

Bunlara static util methods deniyor. Extension…


“Compared to horrors that are OpenVPN and IPSec, WireGuard is a work of art” -Linus Torvalds

0. VPN, Wireguard, Pi-hole

VPN

VPN virtual private network’ün kısaltılmışı, yani sanal özel ağ demek. İnternete başka bir ip üzerinden bağlanmanızı sağlıyor. VPN ile bölgesel yasak ve kısıtlamaları aşabilirsiniz ve internette gezinirken kimliğinizi saklamanıza yardımcı olur.

Pi-hole

Pi-hole bir proje. Pi kelimesi Raspberry Pi’den geliyor, hole ise bildiğimiz delik. Raspberry Pi kart boyutunda çok uygun fiyatlı bilgisayar. Monitöre ve TV’nize takıp kullanabilirsiniz. Pi-hole, Raspberry Pi cihazınızı reklamları engelleyen bir DNS sunucusuna dönüştürmenizi sağlıyor. Güzel de bir paneli var, logları ve istatistikleri görüp, siteleri beyaz ve kara listelere eklemenizi sağlıyor.

Wireguard

Wireguard bir VPN protokolü, tıpkı OpenVPN gibi. Yeni sayılır fakat çok başarılı. Birkaç haftadır test ediyorum, telefonumda…


Photo: Neven Krcmarak

What’s Pusher?

Pusher is a hosted service for providing real-time data and functionality to your mobile and web apps easily.

The project that I now working is using Pusher, and while searching for what’s Pusher, I’ve came across a Flutter package. The package is working fine and I’m glad I find it so quick. Thanks to Flutter community and HomeXlabs.

Pusher Websocket Package

This package wraps pusher-websocket-java and pusher-websocket-swift plugins, it’s good to know that it’s unofficial and not maintained by Pusher.

After creating your Pusher account, you need to get key and cluster info for your project. After that, add pusher_websocket_flutter to your pubsec.yaml.


Why SVG?

SVG stands for scalable vector graphics. There may be many reasons to use SVGs, your graphic designer friend might have been exported the app visuals as SVG or simply you may not want to use 5 different rasterized images for your app.

How to use SVG’s in Flutter?

If you simply use your SVGs with Image.network or Image.asset, you will get a codec error. They are not supported yet.

Fortunately, there is a solution from the community. There is a package called flutter_svg.

We’re starting with adding the package to pubspec.yaml. After that, we can just import it and use it.

import 'package:flutter_svg/flutter_svg.dart';

I have two…


Fotoğraf: Neven Krcmarak

Pusher nedir?

Pusher web ve mobil uygulamalarınıza kolay yoldan gerçek zamanlı veri ve fonksiyonellik sağlayabilen bir hosted service.

Şuan çalıştığım projede pusher kullanılıyor ve pusher nedir ne değildir diye bakarken sadece 10 saat önce paylaşılmış bir Flutter paketi bulmak beni çok mutlu etti. HomeXlabs’a ve Flutter topluluğuna teşekkür ederim.

Pusher Websocket Paketi

pusher-websocket-java ve pusher-websocket-swift pluginlerini saran, resmi olmayan bir Flutter paketi şimdi kuracağımız.

Pusher hesabınızı açtıktan sonra, projeniz için key ve cluster bilgilerini almanız gerekiyor. Sonrasında pubsec.yaml’a pusher_websocket_flutter paketini ekleyin.


Bu yazımda Flutter’a başladığımdan beri navigasyon ile ilgili işlerde çözüm sürecimin nasıl geliştiğini ve evrildiğini anlatacağım. Aynı zamanda şuan kullandığım en temiz halini de görmüş olacaksınız.

Giriş

Android tarafında Activity, iOS tarafında ViewController bizim bu yazıda bahsettiğimiz route’dur. Flutter’da ise bunlar screens ve pages, yani sayfalar route’dur ve bunlar widget’tır.

Klasik Navigator.push()

Yeni bir route’a geçmek için Navigator’ı kullanabilirsiniz. Navigator.push() metodu, yeni bir route’u Navigator tarafından kontrol edilen bir yığın’a(stack) atıyor. Navigator.push fonksiyonu context ve route’u parametre olarak alıyor.

Peki route’u nerden bulabiliriz ve bu metoda atabiliriz?

Kendi route’unuzu yaratabilirsiniz ya da MaterialPageRoute kullanabilirsiniz. MaterialPageRoute aşağıda olduğu gibi bir builder fonksiyonu istiyor ve…

Mirkan

Lead Front-end Engineer @cadooinc, loves Flutter, Firebase and Figma. Find me on @FlutterIzmir

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store