Derleme yönteminde Flutter Riverpod context.read vs Provider
Riverpod belgelerinde şöyle diyor:
context.read(myProvider)Çözüm burada .Bunu kullanarak, önceki kodumuzu şu şekilde yeniden düzenleyebiliriz:
@override Widget build(BuildContext context) { return RaisedButton( onPressed: () => context.read(counterProvider).state++, child: Text('increment'), ); }Bunu yaparak, düğmemize tıklamak sayacı yine de artırır. Ancak artık sağlayıcıyı dinlemiyoruz, bu da gereksiz yeniden yapılandırmalardan kaçınıyor.
Ama sonra diyor ki:
Dikkat
Bir Widget yönteminin
context.readiçinden aramaktan kaçınınbuild. Yeniden inşaları optimize etmek istiyorsanız bunun yerine Sağlayıcıda dinlenen değeri çıkarın.
Bu benim için biraz kafa karıştırıcı. Dokümantasyon, context.readönce buildyöntemin içinde kullanımına bir örnek verir ve ardından bundan kaçınmak için bir uyarı verir. Neden?
Yanıtlar
buildYöntem düzeni sırasında birden çok kez çağrılabilir. Bu nedenle, içinde fazladan iş yapmaktan kaçınmalısınız (modelinizde bir yöntemi çağırmak gibi).
Ancak, çağrıldığında onPressedgeri aranma RaisedButtonaslında buildçağrılmaz. onPressedyalnızca kullanıcı düğmeye bastığında çağrılır. Riverpod ancak o zaman sağlayıcınızı okuyacak ve modeldeki yöntemi çağıracaktır. Yani belgelerdeki uyarı bu durumda geçerli değildir.