ConsumerWidget ve ref.watch
Coddy'nin Flutter Journey'sinin Durum Yönetimi bölümünün bir parçası. Ders 17 / 27.
Herhangi bir widget, bir ref edinebildiğinde bir sağlayıcıyı okuyabilir. Widget'a böyle bir değer vermek için iki şeyi değiştirin:
extends StatelessWidget,extends ConsumerWidgetolur.buildikinci bir parametre alır:WidgetRef ref.
class CityName extends ConsumerWidget {
const CityName({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final city = ref.watch(cityProvider);
return Text(city);
}
}ref.watch(cityProvider), sağlayıcının değerini verir; burada bu değer Lisbon metnidir ve değer her değiştiğinde widget'ı yeniden oluşturur. ref.watch olmadan cityProvider, değeri değil, yalnızca sağlayıcının kendisidir.
Bir değere ihtiyaç duyan her widget, nerede olursa olsun, bu şekilde ister. Yapıcılar aracılığıyla aşağıya hiçbir şey aktarılmaz ve değeri bulmak için context gerekmez.
Görev
KolayCityName ve Temperature yer tutucular gösteriyor. Dosyanın üst kısmındaki sağlayıcıları okuyacak şekilde düzenleyin:
- İkisini de
ConsumerWidget'a dönüştürün. CityName,cityProviderdeğerini gösterir.Temperature,temperatureProviderdeğerini aynı boyutta ve ardından°Cgelecek şekilde gösterir.
Kendin dene
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
final cityProvider = Provider((ref) => 'Lisbon');
final temperatureProvider = Provider((ref) => 21);
void main() {
runApp(const ProviderScope(child: MyApp()));
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(title: const CityName()),
body: const Center(child: Temperature()),
),
);
}
}
class CityName extends StatelessWidget {
const CityName({super.key});
@override
Widget build(BuildContext context) {
return const Text('City');
}
}
class Temperature extends StatelessWidget {
const Temperature({super.key});
@override
Widget build(BuildContext context) {
return const Text('0°C', style: TextStyle(fontSize: 64));
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Durum Yönetimi bölümündeki tüm dersler
1State’i Üst Bileşene Taşıma
State’i Alt Bileşene AktarmaAlt Bileşene Bir Callback AktarmaDeğer Gönderen Callback’lerState’i Üst Bileşene Taşıma4Riverpod
Riverpod: ProviderScopeConsumerWidget ve ref.watchRiverpod: StateProviderRiverpod: NotifierDiğer Provider'ları İzleyen Provider'larState'in Nerede Tutulacağını SeçmekKendi başına pratik yap: Online Flutter derleyicisi