Flutter Riverpod context.read vs Provider dalam metode build

Oct 10 2020

Dalam dokumentasi Riverpod dikatakan:

Di situlah context.read(myProvider)solusinya.

Dengan menggunakannya, kita bisa mengubah kode sebelumnya menjadi:

@override 
Widget build(BuildContext context) {   
  return RaisedButton(
    onPressed: () => context.read(counterProvider).state++,
    child: Text('increment'),
  ); 
} 

Dengan demikian, mengklik tombol kami masih menambah penghitung. Tapi kami tidak lagi mendengarkan penyedia, yang menghindari pembangunan kembali yang tidak perlu.

Tapi kemudian dikatakan:

peringatan

Hindari memanggil context.readdi dalam buildmetode Widget. Jika Anda ingin mengoptimalkan rekondisi, ekstrak nilai yang didengarkan di Penyedia sebagai gantinya.

Ini sedikit membingungkan saya. Pertama dokumentasi memberikan contoh penggunaan context.readdi dalam buildmetode dan kemudian memberikan peringatan untuk menghindarinya. Mengapa?

Jawaban

3 Suragch Oct 10 2020 at 16:57

The buildmetode dapat disebut beberapa kali selama tata letak. Jadi, Anda harus menghindari melakukan pekerjaan tambahan di dalamnya (seperti memanggil metode pada model Anda).

Namun, onPressedcallback RaisedButtontidak benar-benar dipanggil saat builddipanggil. onPressedhanya dipanggil saat pengguna menekan tombol. Hanya dengan begitu Riverpod akan membaca penyedia Anda dan memanggil metode pada model. Jadi peringatan dalam dokumentasi tidak berlaku dalam situasi itu.