package:flutter/services.dart
Flutter’da platformlar arası (Android, iOS, Web, masaüstü vb.) etkileşim fonksiyonunu sağlayan çok önemli bir kütüphanedir. Pano, sistem gezintisi, klavye olayları, kanal iletişimleri vb. gibi platforma özgü özelliklere erişmek için yardımcı sınıflar ve yöntemler içerir.
Aşağıda services.dart
bazı temel sınıfların ve yöntemlerin ayrıntılı açıklamaları yer almaktadır:
1. SystemChannels
SystemChannels
Flutter’ın platformla iletişim kurmasını sağlayan kanal sınıfıdır ve platformla çift yönlü iletişim için bir dizi önceden tanımlanmış kanal sağlar.
Ortak kanallar:
SystemChannels.platform
: Pano, sistem navigasyonu vb. gibi temel platform işlevlerine erişmek için kullanılır.SystemChannels.textInput
: Platformun metin giriş sistemiyle etkileşim kurmak için kullanılır.SystemChannels.keyEvent
: Klavye olaylarını yönetmek için kullanılır.SystemChannels.lifecycle
: Uygulama yaşam döngüsü olaylarını izlemek için kullanılır.SystemChannels.navigation
: Sistem gezinme olaylarını (geri düğmesi gibi) işlemek için kullanılır.
Örnek: Geri Düğmesini Dinleme
SystemChannels.navigation.setMethodCallHandler((call) async {
if (call.method == 'popRoute') {
// Kullanıcı geri düğmesine bastı
print('Back button pressed');
}
});
2. Clipboard
Clipboard
Sınıf sistem panosuna erişim sağlar.
Ana yöntemler:
Clipboard.setData(ClipboardData data)
: Verileri panoya kopyala.Clipboard.getData(String format)
: Panodan veri al.
Örnek: Metni kopyalama ve yapıştırma
import 'package:flutter/services.dart';
// Metni panoya kopyala
void copyToClipboard(String text) async {
await Clipboard.setData(ClipboardData(text: text));
print('Text copied to clipboard');
}
// Panodan metin al
void pasteFromClipboard() async {
ClipboardData? data = await Clipboard.getData('text/plain');
if (data != null) {
print('Pasted text: ${data.text}');
}
}
3. MethodChannel
MethodChannel
Flutter’ın platformla (Android, iOS vb.) iletişim kurmasını sağlayan temel araçtır. Flutter’ın platform kodunu çağırabilmesini ve platformdan dönüş değerleri alabilmesini sağlar.
Ana yöntemler:
MethodChannel.invokeMethod(String method, [dynamic arguments])
: Platform metodunu çağırın.MethodChannel.setMethodCallHandler(Future<dynamic> handler(MethodCall call))
: Platformu Flutter’ın işleyicisini çağıracak şekilde ayarlayın.
Örnek: Bir platform yöntemini çağırma
import 'package:flutter/services.dart';
// Bir MethodChannel oluşturun
const platform = MethodChannel('com.example.app/channel');
// Platform yöntemlerini çağırma
void getBatteryLevel() async {
try {
final int result = await platform.invokeMethod('getBatteryLevel');
print('Battery level: $result%');
} on PlatformException catch (e) {
print('Failed to get battery level: ${e.message}');
}
}
4. EventChannel
EventChannel
Platformdan Flutter’a olay akışlarını (sensör verileri, ağ durumu değişiklikleri vb.) göndermek için kullanılır.
Ana yöntemler:
EventChannel.receiveBroadcastStream([dynamic arguments])
: Platformun gönderdiği etkinlik akışını dinleyin.
Örnek: Ağ durumu değişikliklerini dinleme
import 'package:flutter/services.dart';
// Bir EventChannel oluşturun
const eventChannel = EventChannel('com.example.app/network');
// Ağ durumu değişikliklerini dinleyin
void listenToNetworkChanges() {
eventChannel.receiveBroadcastStream().listen((event) {
print('Network status changed: $event');
}, onError: (error) {
print('Error: $error');
});
}
5. PlatformException
PlatformException
Flutter’ın platformla iletişimi sırasında atılan istisna sınıfıdır, genellikle platform metodlarındaki hataları yakalamak için kullanılır.
Birincil Nitelikler:
code
: Hata kodu.message
:hata mesajı.details
: Hatanın detayları.
Örnek: Platform istisnalarını yakalama
try {
await platform.invokeMethod('someMethod');
} on PlatformException catch (e) {
print('Error: ${e.code}, ${e.message}');
}
6. SystemUiOverlayStyle
SystemUiOverlayStyle
Durum çubuğu ve gezinme çubuğunun rengi gibi sistem kullanıcı arayüzünün stilini ayarlamak için kullanılır.
Birincil Nitelikler:
statusBarColor
: Durum çubuğu arka plan rengi.statusBarIconBrightness
: Durum çubuğu simgesi parlaklığı (Brightness.light
veyaBrightness.dark
).systemNavigationBarColor
: Gezinme çubuğu arka plan rengi.systemNavigationBarIconBrightness
: Gezinme çubuğu simgesi parlaklığı.
Örnek: Durum çubuğu stilini ayarlama
import 'package:flutter/services.dart';
void setSystemUIOverlayStyle() {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.dark,
systemNavigationBarColor: Colors.white,
systemNavigationBarIconBrightness: Brightness.dark,
));
}
7. SystemChrome
SystemChrome
Uygulama pencerelerini ve sistem kullanıcı arayüzünü kontrol etmeye yönelik işlevler sağlar.
Ana yöntemler:
SystemChrome.setEnabledSystemUIMode(SystemUiMode mode)
: Sistem kullanıcı arayüzü modunu (örneğin tam ekran) ayarlayın.SystemChrome.setPreferredOrientations(List<DeviceOrientation> orientations)
: Uygulamanın tercih edilen yönünü ayarlayın.SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle style)
: Sistem kullanıcı arayüzünün stilini ayarlayın.
Örnek: Tam ekran modunu ayarlama
import 'package:flutter/services.dart';
void enableFullScreen() {
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
}
8. TextInput
TextInput
Platformun metin giriş sistemiyle etkileşime girmek için sınıf.
Ana yöntemler:
TextInput.attach(TextInputConnection connection, TextInputConfiguration configuration)
: Metin giriş sistemine bağlanın.TextInput.finishAutofillContext()
: Otomatik doldurma bağlamını tamamlayın.
Örnek: Metin girişini kontrol etme
import 'package:flutter/services.dart';
void controlTextInput() {
final TextInputConnection connection = TextInput.attach(
TextInputClient(),
TextInputConfiguration(),
);
connection.show();
}
9. KeyEvent
KeyEvent
Klavye olaylarını işleme sınıfı.
Ana yöntemler:
RawKeyboard.instance.addListener(ValueChanged<RawKeyEvent> listener)
:Klavye olaylarını dinleyin.
Örnek: Klavye olaylarını dinleme
import 'package:flutter/services.dart';
void listenToKeyEvents() {
RawKeyboard.instance.addListener((event) {
if (event is RawKeyDownEvent) {
print('Key pressed: ${event.logicalKey}');
}
});
}
Özetle
services.dart
Platformla etkileşim kurmak için zengin araç sınıfları ve yöntemler sunar. Bununla aşağıdaki işlevleri gerçekleştirebilirsiniz:
- Panoya erişin.
- Platform koduyla (
MethodChannel
veEventChannel
) iletişim kurun. - Kontrol sistemi kullanıcı arayüzü stilini ve davranışını belirler.
- Klavye olaylarını ve metin girişini yönetir.