FutureProvider
FutureProvider
, asenkron kodlar için Provider'ın eşdeğeridir.
FutureProvider
genellikle şu amaçlarla kullanılır:
- asenkron işlemleri (ağ istekleri gibi) gerçekleştirmek ve önbelleğe almak
- asenkron işlemlerin hata/yükleme durumlarını iyi bir şekilde yönetmek
- birden fazla asenkron değeri başka bir değerde birleştirmek
FutureProvider
, ref.watch ile birleştirildiğinde çok iyi çalışır. Bu kombinasyon, bazı değişkenler değiştiğinde
otomatik olarak bazı verilerin alınmasını sağlar ve her zaman en güncel değere sahip olmamızı garanti eder.
FutureProvider
, kullanıcı etkileşiminden sonra hesaplamayı doğrudan değiştirmek için bir yol sunmaz.
Basit kullanım durumlarını çözmek için tasarlanmıştır.
Daha gelişmiş senaryolar için StateNotifierProvider kullanmayı düşünün.
Kullanım Örneği: Bir yapılandırma dosyasını okumak
FutureProvider
, bir JSON dosyasını okuyarak oluşturulan bir Configuration
nesnesini
göstermenin uygun bir yolu olabilir.
Yapılandırmanın oluşturulması, tipik async/await sözdizimiyle yapılır, ancak provider içinde. Flutter'ın varlık sistemi kullanılarak, bu şöyle olurdu:
Future<Configuration> fetchConfiguration(Ref ref) async {
final content = json.decode(
await rootBundle.loadString('assets/configurations.json'),
) as Map<String, Object?>;
return Configuration.fromJson(content);
}
Daha sonra, kullanıcı arayüzü yapılandırmaları şu şekilde dinleyebilir:
Widget build(BuildContext context, WidgetRef ref) {
final config = ref.watch(fetchConfigurationProvider);
return switch (config) {
AsyncError(:final error) => Text('Error: $error'),
AsyncData(:final value) => Text(value.host),
_ => const CircularProgressIndicator(),
};
}
Bu, Future tamamlandığında kullanıcı arayüzünü otomatik olarak yeniden oluşturur. Aynı zamanda, birden fazla widget yapılandırmaları isterse, varlık yalnızca bir kez çözümlenir.
Gördüğünüz gibi, bir widget içinde bir FutureProvider
dinlemek bir AsyncValue döndürür,
bu da hata/yükleme durumlarını yönetmeyi sağlar.