สถานะโอเวอร์เลย์เฉพาะหน้าจอ

นำเสนอ dialogs และ sheets ด้วย OverlayRequest? และแสดงผลผ่าน ScreenOverlayHost หรือ AnimatedScreenOverlayHost.

ช่อง overlay เดียว

จำลอง overlay เป็น OverlayRequest? และล้างมันเพื่อลบออก.

รองรับ dialog และ sheet

ใช้ DialogRequest และ BottomSheetRequest พร้อม payload data แบบเลือกได้.

ควบคุมลำดับ back

ปิด overlay ก่อน แล้วค่อย pop หน้า ผ่าน back-scope widgets.

แพตเทิร์น overlay host

เก็บ overlay ไว้ใน state และสร้าง UI ของ overlay ผ่าน overlayBuilder.

กฎสถานะของ overlay

โฮสต์โอเวอร์เลย์แบบแอนิเมชัน

return AnimatedScreenOverlayHost(
  overlay: _overlay,
  onDismiss: _dismissOverlay,
  overlayBuilder: (context, req, dismiss) => switch (req) {
    DialogRequest(key: 'hello') => AlertDialog(
      title: const Text('Hello'),
      actions: [TextButton(onPressed: dismiss, child: const Text('Close'))],
    ),
    _ => null,
  },
  child: DeclarativePagesNavigator(
    pages: _pages,
    buildPage: _buildPage,
    onPopTop: _popTop,
    canPopTop: () => _overlay == null,
  ),
);
Important

เมื่อ overlay แสดงอยู่, บล็อก pop gestures ด้วย canPopTop เพื่อหลีกเลี่ยงความไม่สอดคล้องของ back-swipe บน iOS.