Flutter高级UI框架插件super_scaffold的使用
Flutter高级UI框架插件super_scaffold的使用
Super Scaffold
是一个带有超级功能的框架。它允许你在屏幕左侧固定 Drawer
,在屏幕顶部固定 AppBar
,并且可以轻松地显示确认对话框和加载屏幕。
在屏幕左侧固定Drawer
如果你的应用需要适应其他方向(例如横屏),但你使用的是默认的 Flutter Scaffold,可能会出现一些问题:
要解决这个问题,只需将你的 Scaffold
替换为 SuperScaffold
。
[@override](/user/override)
Widget build(BuildContext context) {
return SuperScaffold(
drawer: Drawer(),
);
}
这样,在横屏模式下,Drawer
依然会固定在屏幕左侧:
所有 Scaffold
的属性都可以应用于 SuperScaffold
,如 appBar
、body
、floatingActionButton
等。
自动显示/隐藏Drawer图标
如果你希望在竖屏时显示 Drawer
图标,在横屏时隐藏它,可以使用 SuperAppBar
替换 Flutter 的 AppBar
。
[@override](/user/override)
Widget build(BuildContext context) {
return SuperScaffold(
appBar: SuperAppBar(),
drawer: Drawer(),
);
}
所有 AppBar
的属性都可以应用于 SuperAppBar
,如 title
、actions
、backgroundColor
等。
在屏幕顶部固定AppBar
如果你在多个页面之间导航,并希望 AppBar
始终固定在屏幕顶部,只需将这些页面包裹在一个 Hero
小部件中。
[@override](/user/override)
Widget build(BuildContext context) {
return SuperScaffold(
appBar: Hero(
tag: "tag",
child: AppBar(),
),
drawer: Drawer(),
);
}
如果 AppBar
包含底部的 TabBar
,则需要执行以下步骤:
- 将
State
替换为SuperState
。 - 覆盖
SuperState
的tabsLength
属性并插入正确的标签数量。 - 将
SuperState
的tabController
添加到TabBar
和TabBarView
中。
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
。
然后,调用 SuperState
的 scaffold
属性中的异步方法 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
。
然后,调用 SuperState
的 scaffold
属性中的 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
。
你可以通过 confirmationBuilder
和 loadingBuilder
分别自定义确认对话框和加载屏幕。
[@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
更多关于Flutter高级UI框架插件super_scaffold的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
super_scaffold
是 Flutter 中的一个高级 UI 框架插件,旨在简化复杂的 UI 构建过程,提供更强大和灵活的 Scaffold 功能。它可以帮助开发者更高效地构建复杂的用户界面,减少样板代码的编写。
主要功能
- 增强的 Scaffold 功能:
super_scaffold
提供了比 Flutter 原生Scaffold
更丰富的功能,如自定义 AppBar、Drawer、BottomNavigationBar 等。 - 灵活的主题管理:支持自定义主题,轻松实现夜间模式等主题切换。
- 响应式布局:内置响应式布局支持,适配不同屏幕尺寸。
- 状态管理集成:与常见的状态管理工具(如 Provider、Riverpod、Bloc 等)无缝集成。
- 动画和过渡效果:内置多种动画和过渡效果,提升用户体验。
安装
在 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();
}
}