Ekran Oryantasyonu Değişiminde Veri Kaybı: Lifecycle ve SaveState

Ekran oryantasyonu değiştiğinde (yatay/dikey), Android varsayılan olarak Activity'yi yeniden oluşturur. Bu sırada state verileriniz kaybolur. Flutter'da benzer şekilde widget ağacı yeniden inşa edilir. Bundan korunmak için lifecycle'ı anlamak ve SavedStateHandle ya da ViewModel stratejisi kullanmak gerekir.

Kullanıcı bir form dolduruyorsa veya API'den veri yüklüyorsa, telefonu döndürdüğünde:
- Widget state sıfırlanır
- Yazılan metin silinir
- Yüklenen liste boşalır
- API isteği baştan başlar

Flutter'da `provider` ve `riverpod` paketleri state'i otomatik olarak korur. Aşağıda `riverpod` ile praktik örnek:

1import 'package:flutter/material.dart';
2import 'package:flutter_riverpod/flutter_riverpod.dart';
3
4// State provider'ı tanımla
5final userNameProvider = StateNotifierProvider<UserNameNotifier, String>(
6(ref) => UserNameNotifier(),
7);
8
9class UserNameNotifier extends StateNotifier<String> {
10UserNameNotifier(): super('');
11
12void setName(String name) {
13state = name; // State güncellenir ve saklanır
14}
15}
16
17void main() => runApp(const ProviderScope(child: MyApp()));
18
19class MyApp extends ConsumerWidget {
20const MyApp({Key? key}): super(key: key);
21
23Widget build(BuildContext context, WidgetRef ref) {
24final userName = ref.watch(userNameProvider);
25
26return MaterialApp(
27home: Scaffold(
28appBar: AppBar(title: const Text('Oryantasyon Testi')),
29body: Column(
30children: [
31TextField(
32onChanged: (value) {
33ref.read(userNameProvider.notifier).setName(value);
34},
35decoration: const InputDecoration(hintText: 'Adını gir'),
36),
37Text('Merhaba, $userName!'),
38],
39),
40),
41);
42}
43}

Çıktı: Telefonu döndürüp yeniden oryantasyon yapsanız bile, `userName` değişkeni korunur ve metin silinmez.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

1. Pubspec.yaml'a ekle: `flutter_riverpod` paketini dependencies'ye koy
2. Provider tanımla: State'i tutacak provider oluştur
3. ConsumerWidget kullan: Riverpod'u dinlemek için ConsumerWidget'a geç
4. ref.watch() ile izle: State değişimlerini otomatik güncelle

Native Android'de ise `onSaveInstanceState()` callback'ini override ederek Bundle'a veri yazarız, `onCreate()` içinde geri alırız. Flutter'da bu işi provider kütüphaneleri otomatik yapar.

Hızlı kural: Stateless widget + provider = oryantasyon güvenli. StatefulWidget sadece UI = riskli.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz