跳到主內容

顯示 Cupertino 表單

如何實現 Cupertino 底部彈窗以顯示訊息和內容。

Cupertino 底部彈窗是一種 iOS 風格的模態底部彈窗,用於呈現內容或選項。它會從螢幕底部滑入,並可以透過向下拉動來關閉。

在 Flutter 中,這可以透過 showCupertinoSheet 來實現。本教程透過以下步驟來實現一個 Cupertino 底部彈窗:

  1. 建立一個 CupertinoAppMaterialApp
  2. 顯示彈窗內容。

1. 建立一個 CupertinoApp

#

在構建遵循 iOS 設計準則的應用時,可以使用 CupertinoApp。以下示例在螢幕中央提供了一個用於觸發模態彈窗的按鈕。

dart
class CupertinoSheetDemo extends StatelessWidget {
  const CupertinoSheetDemo({super.key});

  @override
  Widget build(BuildContext context) {
    return const CupertinoApp(
      title: 'CupertinoSheet Demo',
      home: CupertinoSheetPage(),
    );
  }
}

2. 顯示彈窗內容

#

在搭建好基礎應用結構後,即可顯示彈窗。呼叫 showCupertinoSheet 並提供一個 builder,該構建器返回彈窗的內容(例如 SingleChildScrollView)即可顯示它。

dart
showCupertinoSheet(
  context: context,
  builder: (context) {
    return SingleChildScrollView(
      child: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const SizedBox(height: 100),
            const Text('This is a Cupertino sheet'),
            const SizedBox(height: 20),
            CupertinoButton(
              child: const Text('Close'),
              onPressed: () {
                Navigator.pop(context);
              },
            ),
          ],
        ),
      ),
    );
  },
);

互動示例

#
import 'package:flutter/cupertino.dart';

void main() => runApp(const CupertinoSheetDemo());

class CupertinoSheetDemo extends StatelessWidget {
  const CupertinoSheetDemo({super.key});

  @override
  Widget build(BuildContext context) {
    return const CupertinoApp(
      title: 'CupertinoSheet Demo',
      home: CupertinoSheetPage(),
    );
  }
}

class CupertinoSheetPage extends StatelessWidget {
  const CupertinoSheetPage({super.key});

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: const CupertinoNavigationBar(
        middle: Text('CupertinoSheet Demo'),
      ),
      child: Center(
        child: CupertinoButton.filled(
          onPressed: () {
            showCupertinoSheet(
              context: context,
              builder: (context) {
                return SingleChildScrollView(
                  child: Center(
                    child: Column(
                      mainAxisSize: MainAxisSize.min,
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        const SizedBox(height: 100),
                        const Text('This is a Cupertino sheet'),
                        const SizedBox(height: 20),
                        CupertinoButton(
                          child: const Text('Close'),
                          onPressed: () {
                            Navigator.pop(context);
                          },
                        ),
                      ],
                    ),
                  ),
                );
              },
            );
          },
          child: const Text('Show Sheet'),
        ),
      ),
    );
  }
}