Derleme yönteminde Flutter Riverpod context.read vs Provider

Oct 10 2020

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ın build. 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

3 Suragch Oct 10 2020 at 16:57

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.