Flutter界面原型设计插件flutter_storyboard的使用
Flutter界面原型设计插件flutter_storyboard的使用
storyboard
一个用于在Flutter应用中快速查看和测试所有屏幕的调试工具。
演示: https://rodydavis.github.io/storyboard/
示例
自定义车道构建器
动态屏幕尺寸
Material App 示例
小部件示例
多个自定义车道示例
开始使用
将您的 MaterialApp
包裹在 Storyboard
中。
return StoryBoard.material(
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Storyboard Example',
theme: ThemeData.light().copyWith(
visualDensity: VisualDensity.adaptivePlatformDensity,
),
darkTheme: ThemeData.dark().copyWith(
visualDensity: VisualDensity.adaptivePlatformDensity,
),
themeMode: ThemeMode.light,
home: HomeScreen(),
routes: {
'/home': (_) => HomeScreen(),
'/about': (_) => AboutScreen(),
'/settings': (_) => SettingsScreen(),
},
),
);
将您的 WidgetsApp
包裹在 Storyboard.widgets()
中。
将您的 CupertinoApp
包裹在 Storyboard.cupertino()
中。
自定义路由和小部件
您可以向画布中添加任意数量的自定义小部件,包括自定义路由。可以在构造函数中添加虚拟数据,因为它会渲染所有默认值。
customScreens: [
SettingsScreen(),
AboutScreen(),
CustomWidget(title: 'Dummy Data'),
],
customRoutes: [
RouteSettings(name: '/about'),
],
其他
现在您可以使用热重载来测试所有屏幕!您还可以通过将 enabled
设置为 false
来随时禁用该小部件。更改此值后,您需要执行热重启。
完整示例代码
以下是一个完整的示例代码,展示如何使用 flutter_storyboard
插件。
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_storyboard/flutter_storyboard.dart';
import 'package:random_color/random_color.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return StoryBoard.material(
enabled: true, // 启用Storyboard
usePreferences: true, // 使用偏好设置
crossAxisCount: 7, // 横轴数量
canPanAndScrollWithGesture: true, // 支持手势缩放和平移
cupertinoDevice: Devices.ios.iPhone11, // iOS设备类型
screenSize: Size(400, 700), // 屏幕大小
customScreens: [
for (var i = 0; i < 25; i++)
_generateScreen(
title: Text('Screen$i'),
color: RandomColor(i + 25).randomColor(),
),
],
customRoutes: [
RouteSettings(name: '/about'),
RouteSettings(name: '/counter'),
RouteSettings(name: '/screen_2'),
RouteSettings(name: '/screen_5'),
RouteSettings(
name: '/screen_8',
arguments: {"id": 1234}, // 路由参数
),
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Storyboard Example',
theme: ThemeData.light().copyWith(
visualDensity: VisualDensity.adaptivePlatformDensity,
),
darkTheme: ThemeData.dark().copyWith(
visualDensity: VisualDensity.adaptivePlatformDensity,
),
themeMode: ThemeMode.light,
initialRoute: '/settings', // 初始路由
routes: {
'/': (_) => HomeScreen(), // 主页
'/counter': (_) => CounterScreen(), // 计数器页面
'/settings': (_) => SettingsScreen(), // 设置页面
for (var i = 0; i < 25; i++)
'/screen_$i': (_) => _generateScreen(
title: Text('Screen$i'),
color: RandomColor(i).randomColor(),
),
},
onGenerateRoute: (settings) {
return MaterialPageRoute(
settings: settings,
builder: (context) {
if (settings.name == '/about') return AboutScreen(); // 关于页面
return UnknownScreen(); // 未知页面
},
);
},
),
);
}
}
// 生成屏幕的小部件
Widget _generateScreen({
Text title,
FloatingActionButton fab,
Color color,
}) {
return Builder(
builder: (context) {
final Map<String, dynamic> args =
ModalRoute.of(context).settings.arguments;
return Scaffold(
appBar: AppBar(title: title),
backgroundColor: color,
body: args == null ? null : Center(child: Text(args.toString())),
floatingActionButton: fab,
);
},
);
}
// 主页
class HomeScreen extends StatelessWidget {
const HomeScreen({Key key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
final _size = MediaQuery.of(context).size;
return Scaffold(
appBar: AppBar(
title: Text('Home Screen'),
),
body: Center(
child: Text(_size.toString()),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.info),
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => SettingsScreen(),
));
},
),
);
}
}
// 计数器页面
class CounterScreen extends StatefulWidget {
const CounterScreen({Key key}) : super(key: key);
[@override](/user/override)
_CounterScreenState createState() => _CounterScreenState();
}
class _CounterScreenState extends State<CounterScreen> {
int _counter = 0;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Counter Example'),
),
body: Center(
child: Text('Counter: $_counter'),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
if (mounted)
setState(() {
_counter++;
});
},
),
);
}
}
// 设置页面
class SettingsScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Settings'),
),
backgroundColor: Colors.blue.shade300,
);
}
}
// 关于页面
class AboutScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('About'),
),
backgroundColor: Colors.purple.shade300,
);
}
}
// 未知页面
class UnknownScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('404'),
),
backgroundColor: Colors.red.shade300,
);
}
}
更多关于Flutter界面原型设计插件flutter_storyboard的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter界面原型设计插件flutter_storyboard的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_storyboard
是一个用于 Flutter 的界面原型设计插件,它允许开发者在应用中快速创建和查看多个界面的原型。通过使用 flutter_storyboard
,开发者可以在一个视图中同时展示多个界面,方便进行界面设计和调试。
安装 flutter_storyboard
首先,你需要在 pubspec.yaml
文件中添加 flutter_storyboard
依赖:
dependencies:
flutter:
sdk: flutter
flutter_storyboard: ^1.0.0
然后运行 flutter pub get
来安装依赖。
使用 flutter_storyboard
1. 创建 Storyboard
组件
Storyboard
是 flutter_storyboard
的核心组件,它允许你在一个视图中展示多个界面。你可以通过 Storyboard
组件来包裹你的界面原型。
import 'package:flutter/material.dart';
import 'package:flutter_storyboard/flutter_storyboard.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Storyboard(
children: [
MyHomePage(),
MySecondPage(),
MyThirdPage(),
],
),
);
}
}
2. 定义多个界面
在 Storyboard
的 children
中,你可以添加多个界面组件。这些界面将会在 Storyboard
中并排展示。
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home Page'),
),
body: Center(
child: Text('This is the Home Page'),
),
);
}
}
class MySecondPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Second Page'),
),
body: Center(
child: Text('This is the Second Page'),
),
);
}
}
class MyThirdPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Third Page'),
),
body: Center(
child: Text('This is the Third Page'),
),
);
}
}
3. 运行应用
当你运行应用时,Storyboard
将会在一个视图中展示所有你添加的界面。你可以通过滚动来查看不同的界面。
自定义 Storyboard
Storyboard
提供了一些自定义选项,例如设置每个界面的宽度、高度、背景颜色等。
Storyboard(
width: 300, // 每个界面的宽度
height: 600, // 每个界面的高度
backgroundColor: Colors.grey[200], // 背景颜色
children: [
MyHomePage(),
MySecondPage(),
MyThirdPage(),
],
)