Flutter Riverpod context.read vs Provider dalam metode build
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 dalambuildmetode 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
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.