ฉันยังคงตัดหัวของฉันรอบเทคนิครัฐจัดการในกระพือและกำลังบิตสับสนเกี่ยวกับเวลาและเหตุผลที่จะใช้กับProvider.of<X>
Consumer<X>
ฉันเข้าใจ (ฉันคิดว่า) จากเอกสารที่เมื่อเลือกระหว่างสองสิ่งนี้คุณจะใช้ Provider.of เมื่อเราต้องการเข้าถึงข้อมูล แต่คุณไม่จำเป็นต้องเปลี่ยน UI ดังนั้นต่อไปนี้ (นำมาจากเอกสาร) จะสามารถเข้าถึงข้อมูลและอัปเดต UI ในกิจกรรมใหม่:
return HumongousWidget(
// ...
child: AnotherMonstrousWidget(// <- This widget will rebuild on new data events
// ...
child: Consumer<CartModel>(
builder: (context, cart, child) {
return Text('Total price: ${cart.totalPrice}');
},
),
),
);
ในขณะที่เราต้องการเพียงข้อมูลที่ไม่ต้องการสร้างใหม่ด้วย UI เราจะใช้Provider.of<X>
กับlisten
พารามิเตอร์ที่ตั้งค่าfalse
ดังต่อไปนี้:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
อย่างไรก็ตามlisten
ไม่จำเป็นต้องใช้และสิ่งต่อไปนี้จะทำงานด้วย:
Provider.of<CartModel>(context).add(item); \\listener optional
ดังนั้นสิ่งนี้ทำให้ฉันมีคำถามสองสามข้อ:
- นี่คือวิธีที่ถูกต้องที่จะแยกแยะและ
Provider.of<X>
Consumer<X>
อดีตไม่อัปเดต UI ผู้ใช้รุ่นหลังทำ - หาก
listen
ไม่ได้ตั้งค่าfalse
เป็นเครื่องมือจะถูกสร้างใหม่ตามค่าเริ่มต้นหรือไม่สร้างใหม่ ถ้าlisten
ตั้งไว้เป็นtrue
อะไร - ทำไมมี
Provider.of
ตัวเลือกในการสร้าง UI ทั้งหมดเมื่อเรามีConsumer
?