Flutter高级UI框架插件super_scaffold的使用

Flutter高级UI框架插件super_scaffold的使用

Super Scaffold 是一个带有超级功能的框架。它允许你在屏幕左侧固定 Drawer,在屏幕顶部固定 AppBar,并且可以轻松地显示确认对话框和加载屏幕。

在屏幕左侧固定Drawer

如果你的应用需要适应其他方向(例如横屏),但你使用的是默认的 Flutter Scaffold,可能会出现一些问题:

Flutter Scaffold Landscape

要解决这个问题,只需将你的 Scaffold 替换为 SuperScaffold

[@override](/user/override)
Widget build(BuildContext context) {
    return SuperScaffold(
        drawer: Drawer(),
    );
}

这样,在横屏模式下,Drawer 依然会固定在屏幕左侧:

Super Scaffold Landscape

所有 Scaffold 的属性都可以应用于 SuperScaffold,如 appBarbodyfloatingActionButton 等。

自动显示/隐藏Drawer图标

如果你希望在竖屏时显示 Drawer 图标,在横屏时隐藏它,可以使用 SuperAppBar 替换 Flutter 的 AppBar

[@override](/user/override)
Widget build(BuildContext context) {
    return SuperScaffold(
        appBar: SuperAppBar(),
        drawer: Drawer(),
    );
}

所有 AppBar 的属性都可以应用于 SuperAppBar,如 titleactionsbackgroundColor 等。

在屏幕顶部固定AppBar

如果你在多个页面之间导航,并希望 AppBar 始终固定在屏幕顶部,只需将这些页面包裹在一个 Hero 小部件中。

[@override](/user/override)
Widget build(BuildContext context) {
    return SuperScaffold(
        appBar: Hero(
            tag: "tag",
            child: AppBar(),
        ),
        drawer: Drawer(),
    );
}

如果 AppBar 包含底部的 TabBar,则需要执行以下步骤:

  1. State 替换为 SuperState
  2. 覆盖 SuperStatetabsLength 属性并插入正确的标签数量。
  3. SuperStatetabController 添加到 TabBarTabBarView 中。
class _PageState extends SuperState<Page> {
    [@override](/user/override)
    int get tabsLength => 3;

    [@override](/user/override)
    Widget build(BuildContext context) {
        return SuperScaffold(
            appBar: Hero(
                tag: "tag",
                child: AppBar(
                    bottom: TabBar(
                        controller: tabController,
                        ...
                    ),
                ),
            ),
            drawer: Drawer(),
            body: TabBarView(
                controller: tabController,
                ...
            ),
        );
    }
}

显示确认对话框

首先,将 State 替换为 SuperState

然后,调用 SuperStatescaffold 属性中的异步方法 confirm

class _PageState extends SuperState<Page> {
    [@override](/user/override)
    Widget build(BuildContext context) {
        return SuperScaffold(
            floatingActionButton: FloatingActionButton(
                child: Icon(Icons.add),
                onPressed: () async {
                    bool ok = await scaffold!.confirm("Do you want to continue?");
                },
            ),
        );
    }
}

显示加载屏幕

首先,将 State 替换为 SuperState

然后,调用 SuperStatescaffold 属性中的 wait 方法。

class _PageState extends SuperState<Page> {
    [@override](/user/override)
    Widget build(BuildContext context) {
        return SuperScaffold(
            floatingActionButton: FloatingActionButton(
                child: Icon(Icons.refresh),
                onPressed: () async {
                    Completer loading = scaffold!.wait();

                    await Future.delayed(Duration(milliseconds: 1500));

                    loading.complete();
                },
            ),
        );
    }
}

自定义确认对话框和加载屏幕

SuperScaffold 使用 Flutter 的默认 AlertDialog 显示确认对话框,加载屏幕只是一个居中的 CircularProgressIndicator

你可以通过 confirmationBuilderloadingBuilder 分别自定义确认对话框和加载屏幕。

[@override](/user/override)
Widget build(BuildContext context) {
    return SuperScaffold(
        drawer: Drawer(),
        confirmationBuilder: (context, confirmationMessage) {
            return ...
        },
        loadingBuilder: (context) {
            return ...
        }
    );
}

更多关于Flutter高级UI框架插件super_scaffold的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter高级UI框架插件super_scaffold的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


super_scaffold 是 Flutter 中的一个高级 UI 框架插件,旨在简化复杂的 UI 构建过程,提供更强大和灵活的 Scaffold 功能。它可以帮助开发者更高效地构建复杂的用户界面,减少样板代码的编写。

主要功能

  1. 增强的 Scaffold 功能super_scaffold 提供了比 Flutter 原生 Scaffold 更丰富的功能,如自定义 AppBar、Drawer、BottomNavigationBar 等。
  2. 灵活的主题管理:支持自定义主题,轻松实现夜间模式等主题切换。
  3. 响应式布局:内置响应式布局支持,适配不同屏幕尺寸。
  4. 状态管理集成:与常见的状态管理工具(如 Provider、Riverpod、Bloc 等)无缝集成。
  5. 动画和过渡效果:内置多种动画和过渡效果,提升用户体验。

安装

pubspec.yaml 文件中添加 super_scaffold 依赖:

dependencies:
  flutter:
    sdk: flutter
  super_scaffold: ^1.0.0

然后运行 flutter pub get 安装依赖。

基本用法

1. 创建一个简单的页面

import 'package:flutter/material.dart';
import 'package:super_scaffold/super_scaffold.dart';

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return SuperScaffold(
      appBar: SuperAppBar(
        title: Text('My Home Page'),
      ),
      body: Center(
        child: Text('Hello, Super Scaffold!'),
      ),
      bottomNavigationBar: SuperBottomNavigationBar(
        items: [
          SuperBottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'),
          SuperBottomNavigationBarItem(icon: Icon(Icons.settings), label: 'Settings'),
        ],
        currentIndex: 0,
        onTap: (index) {
          // Handle navigation
        },
      ),
    );
  }
}

2. 自定义主题

import 'package:flutter/material.dart';
import 'package:super_scaffold/super_scaffold.dart';

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Super Scaffold Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      darkTheme: ThemeData.dark(),
      home: MyHomePage(),
    );
  }
}

3. 响应式布局

import 'package:flutter/material.dart';
import 'package:super_scaffold/super_scaffold.dart';

class MyResponsivePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return SuperScaffold(
      appBar: SuperAppBar(
        title: Text('Responsive Page'),
      ),
      body: SuperResponsiveLayout(
        mobile: Center(child: Text('Mobile Layout')),
        tablet: Center(child: Text('Tablet Layout')),
        desktop: Center(child: Text('Desktop Layout')),
      ),
    );
  }
}

高级用法

1. 自定义动画

import 'package:flutter/material.dart';
import 'package:super_scaffold/super_scaffold.dart';

class MyAnimatedPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return SuperScaffold(
      appBar: SuperAppBar(
        title: Text('Animated Page'),
      ),
      body: SuperAnimatedContainer(
        duration: Duration(seconds: 1),
        curve: Curves.easeInOut,
        child: Center(child: Text('Animated Text')),
      ),
    );
  }
}

2. 状态管理集成

import 'package:flutter/material.dart';
import 'package:super_scaffold/super_scaffold.dart';
import 'package:provider/provider.dart';

class MyProviderPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (_) => MyModel(),
      child: SuperScaffold(
        appBar: SuperAppBar(
          title: Text('Provider Page'),
        ),
        body: Consumer<MyModel>(
          builder: (context, model, child) {
            return Center(child: Text('Count: ${model.count}'));
          },
        ),
      ),
    );
  }
}

class MyModel with ChangeNotifier {
  int _count = 0;

  int get count => _count;

  void increment() {
    _count++;
    notifyListeners();
  }
}
回到顶部