รูปแบบที่ควรหลีกเลี่ยง

บั๊กส่วนใหญ่มักเกิดเมื่อเอาโมเดลแบบ imperative และ declarative มาปนกัน จงรักษาขอบเขตของ state ให้ชัดเจน

การผสม push/pop กับหน้า

อย่าเรียก Navigator.push/pop สำหรับ stack ที่ถูกควบคุมโดย List<PageEntry> อยู่แล้ว

Widget ใน state

อย่าใส่ Widget instance ลงใน metadata ของหน้า เก็บไว้เฉพาะ keys และตัวระบุที่คล้าย route เท่านั้น

คีย์ซ้ำ

อย่านำค่า PageEntry.key ที่ซ้ำกันมาใช้ซ้ำใน stack เดียวกัน

เช็กลิสต์การย้ายระบบ

ใช้เช็กลิสต์นี้ระหว่างการรีวิวรีแฟกเตอร์ เพื่อให้สถาปัตยกรรมคงความสอดคล้องกัน

เช็กลิสต์

ดี / ไม่ดี

// แย่: เอาวิธีแบบ imperative และ declarative มาปนกันสำหรับ stack เดียวกัน
Navigator.of(context).push(...);
_pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];

// ดี: อัปเดตเฉพาะ state แบบ declarative
setState(() {
  _pages = [..._pages, const PageEntry(key: 'detail', name: '/detail')];
});
เคล็ดลับการรีวิว

ระหว่างการรีวิวโค้ด ให้ติดตาม ว่าใครเป็นเจ้าของการเปลี่ยนแปลง stack และปฏิเสธการเปลี่ยนแปลงที่แก้ไข stack เดิมผ่านหลาย API