搜尋套件、儲存庫與 APP 分類

modals 封面
套件詳情v1.0.0+1

modals

Modals,一個用來簡化所有覆蓋層需求的 Flutter 套件!

AndroidiOSWebmacOSWindowsLinux
近 30 天下載
337
喜歡數
49
Pub 分數
140

安裝套件

flutter pub add modals

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

Modals 是一個 Flutter 套件,專為簡化覆蓋層(例如對話方塊、底端彈出選單和自訂彈窗)的建立與管理而設計。它提供乾淨且一致的 API,可在所有平台顯示和處理模態框,減少重複程式碼並提升開發者體驗。內建動畫支援、可關閉性與響應式版面配置,讓 Modals 簡化 Flutter 應用中常見的覆蓋層模式。此套件非常適合尋求輕量、可靠方案來管理 UI 覆蓋層,且無需複雜設定的開發者。

適用情境

  • 顯示對話框和警告
  • 建立自訂覆蓋螢幕
  • 管理底部表單互動
  • 實施引導式使用者流程
  • 處理模態導航
  • 簡化彈出邏輯

主要特色

  • 統一的模態 API
  • 跨平台相容性
  • 內建動畫
  • 輕鬆處理取消
  • 響應式設計支援
  • 最小化樣板程式碼

適合對象

  • Flutter 初學者
  • 以UI為主的應用程式
  • 頻繁覆蓋的應用
  • 希望保持一致性的開發者
  • 重視可維護性的團隊
  • 需要快速原型設計的專案

使用建議

  • 僅限覆疊層特定功能
  • 無內建狀態管理
  • 需要與現有的狀態解決方案進行手動整合
  • 不適合複雜的導航堆疊
  • 依賴於 Flutter 的渲染管道
  • 可能需要額外的樣式以實現進階設計

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

Modals

Modals

Flutter overlays simplified!

Pub

Motivation

Working with Flutter overlays is quite cumbersome. Adding a simple context menu next to your button should not be hard.

Say hello 👋  to Modals, a package to simplify all your overlay needs!

Features

  • Show modals easily
    • Position modals using absolute position
    • Position modals using alignment
    • Position modals based on another widget position
  • Prioritise modal visibility
  • Remove modals easily
    • Remove modal by id
    • Remove all modals at once
    • Remove modal by tapping modal barrier
    • Remove modals on route changes

How to use

Showing modals

showModal is used to show modals. Function accepts a ModalEntry as parameter. ModalEntry has 3 options ModalEntry.positioned, ModalEntry.aligned and ModalEntry.anchored

Positioned
class PositionedModalExample extends StatelessWidget {
  const PositionedModalExample({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: () {
          showModal(ModalEntry.positioned(context,
              tag: 'containerModal',
              left: 200,
              top: 200,
              child: Container(
                color: Colors.red,
                width: 50,
                height: 50,
              )));
        },
        child: const Text('Show Modal'),
      ),
    );
  }
}

Above example positions your widget to absolute position of left: 200 and top 200.

Aligned
class AlignmentModalExample extends StatelessWidget {
  const AlignmentModalExample({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Center(
      child: ElevatedButton(
        onPressed: () {
          showModal(ModalEntry.aligned(context,
              tag: 'containerModal',
              alignment: Alignment.center,
              child: Container(
                color: Colors.red,
                width: 50,
                height: 50,
              )));
        },
        child: const Text('Show Modal'),
      ),
    );
  }
}

Above example aligns your widget to center of the screen.

Anchored

class AnchoredModalExample extends StatelessWidget {
  const AnchoredModalExample({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: [
          const ModalAnchor(
              tag: 'anchor',
              child: Card(
                color: Colors.grey,
                child: Padding(
                  padding: EdgeInsets.all(8.0),
                  child: Icon(Icons.anchor),
                ),
              )),
          Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              ElevatedButton(
                onPressed: () {
                  showModal(ModalEntry.anchored(context,
                      tag: 'anchoredModal',
                      anchorTag: 'anchor',
                      modalAlignment: Alignment.centerLeft,
                      anchorAlignment: Alignment.centerRight,
                      child: Container(
                        color: Colors.red,
                        width: 50,
                        height: 50,
                      )));
                },
                child: const Text('Show Modal'),
              ),
            ],
          ),
        ],
      ),
    );
  }
}

Above example positions widget at next to ModalAnchor widget.

To make widget act as an anchor, wrap widget with ModalAnchor widget.

Prioritising modals

To prioritise modals, use aboveTag and belowTag parameters.

  • aboveTag

    • Modal will be positioned just above given aboveTag
  • belowTag

    • Modal will be positioned just above given belowTag
Removing modals

You have 4 options to remove modals

removeModal(String id) removes modal by the given id

removeAllModals() removes all modals

Below parameters are configured in ModalEntry.

  • Tapping modal barrier

    • barrierDismissible when true (defaults to false) removes modal when tapping the barrier
    • barrierColor change barrier color (defaults to Colors.transparent)
  • Observing route changes

    • removeOnPop
      • The modal is removed when route is popped where the modal exists
    • removeOnPushNext
      • The modal is removed when new route is pushed on top of the route where the modal exists

To enable observing route changes, add navigator observer to root widget.

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'AppModals',
      navigatorObservers: [modalsRouteObserver], // <- This line here. Imported from modals
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const _Home(),
    );
  }
}

Gallery

See the Examples for more information

所屬分類

原始碼儲存庫

使用此套件的專案

暫無相關資料。