Flutter故事书展示插件storybook_ds的使用
Flutter故事书展示插件storybook_ds的使用
故事书设计系统
用于展示设计系统的Widgets的故事书。
查看示例:示例
开始
运行以下命令:
flutter pub add storybook_ds
或者手动添加依赖:
dependencies:
flutter:
sdk: flutter
storybook:
使用
在您的文件中导入项目:
import 'package:storybook_ds/storybook_ds.dart';
为要展示的组件创建一个StatefulWidget
。然后将类State
替换为Storybook
:
class ButtonPage extends StatefulWidget {
const ButtonPage({super.key});
[@override](/user/override)
Storybook<ButtonPage> createState() => _ButtonPageState();
}
class _ButtonPageState extends Storybook<ButtonPage> {
...
}
从您的Storybook
类中删除build
方法。添加以下覆盖方法:
Title
屏幕的标题。建议使用组件名称。
[@override](/user/override)
String get title => "DS Button";
NameObjectInDisplay
在故事书中显示的组件类名。这是故事书中显示组件代码的部分。
[@override](/user/override)
String get nameObjectInDisplay => "DSButton";
Atributs
添加组件的属性。这些由AtributeDto
类表示(更多细节见下文)。
[@override](/user/override)
List<AtributeDto> atributs = [
AtributeDto(
type: 'Function()',
name: 'onPressed',
required: true,
builders: ['elevated', 'outline', 'text'],
),
AtributeDto(
type: 'String',
name: 'text',
required: true,
selectedValue: VariableOption(value: 'Custom Button'),
builders: ['elevated', 'outline', 'text'],
),
AtributeDto(
type: 'Color?',
name: 'color',
builders: ['elevated'],
selectedValue: VariableOption(value: null),
variableOptions: [
VariableOption(
value: Colors.amber,
textInDisplay: 'Colors.amber',
textInSelectedOptions: 'amber',
),
VariableOption(
value: Colors.black,
textInDisplay: 'Colors.black',
textInSelectedOptions: 'black',
),
],
),
];
AtributeDto
AtributeDto
是用于映射组件每个属性的类。其主要功能包括:
Type
定义属性的类型(例如 “String”, “Function()”, “bool”, “double”, “dynamic” 等)。如果属性是可选的,添加问号(例如 “double?”)。Name
定义属性的名称,并将用于映射组件类中的属性(例如 “isLoading”, “value”, “onPressed” 等)。Required
定义属性是否必需。SelectedValue
定义组件在故事书中初始值。它由VariableOption
类定义。VariableOptions
是一个包含元素VariableOption
的列表,允许用户通过故事书与组件进行交互,切换属性的值。用于向用户展示该属性的功能及其如何影响组件的状态。Builders
是一个字符串列表,定义组件出现在哪些构造函数中。- 例如,一个按钮的构造函数是 “DSButton.elevated(…)” 和 “DSButton.outlined(…)”. 如果你的元素属于这两个构造函数,则将
builders
设置为 [“elevated”, “outlined”]。 - 如果你的组件有一个默认构造函数,并且属性存在于该构造函数中,将
null
添加到列表:[null, “elevated”, “outlined”];
- 例如,一个按钮的构造函数是 “DSButton.elevated(…)” 和 “DSButton.outlined(…)”. 如果你的元素属于这两个构造函数,则将
buildComponentWidget
在您的组件的Storybook
类中,返回一个包含组件的scaffold
,以便在故事书中呈现给用户。
使用getWhereAtribut()
函数根据属性名称(name
)检索属性值,并将其分配给组件。这样,当用户操作故事书时,更改会自动应用到组件。
检查通过selectedConstructor
变量选择的构造函数,并返回相应构造函数的组件。
[@override](/user/override)
Widget buildComponentWidget(BuildContext context) {
Widget child;
if (selectedConstructor == 'elevated') {
child = DSButton.elevated(
text: getWhereAtribut('text'),
loading: getWhereAtribut('loading'),
color: getWhereAtribut('color'),
onPressed: () {},
);
} else if (selectedConstructor == 'outline') {
child = DSButton.outline(
text: getWhereAtribut('text'),
loading: getWhereAtribut('loading'),
onPressed: () {},
);
} else {
child = DSButton(
text: getWhereAtribut('text'),
onPressed: () {},
);
}
return Scaffold(
body: Center(
child: child,
),
);
}
示例代码
import 'package:flutter/material.dart';
import 'custom_card_storybook.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
ThemeData theme = ThemeData.light();
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: theme,
debugShowCheckedModeBanner: false,
home: CustomCardStorybook(
onChangeTheme: (ThemeData theme) {
setState(() {
this.theme = theme;
});
},
),
);
}
}
更多关于Flutter故事书展示插件storybook_ds的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter故事书展示插件storybook_ds的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
storybook_ds
是一个用于 Flutter 的插件,它允许开发者以类似于 Storybook 的方式展示和测试 UI 组件。Storybook 是一个非常流行的前端工具,用于独立开发和测试 UI 组件。storybook_ds
提供了一个类似的功能,使得开发者可以在 Flutter 应用中独立展示和测试 UI 组件。
安装 storybook_ds
首先,你需要在 pubspec.yaml
文件中添加 storybook_ds
依赖:
dependencies:
flutter:
sdk: flutter
storybook_ds: ^1.0.0 # 请使用最新的版本
然后运行 flutter pub get
来安装依赖。
基本用法
1. 创建 Storybook
首先,你需要创建一个 Storybook
实例,并添加一些 Story
。
import 'package:flutter/material.dart';
import 'package:storybook_ds/storybook_ds.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Storybook(
stories: [
Story(
name: 'Primary Button',
description: 'A primary button with different states',
builder: (context) => PrimaryButton(
onPressed: () {},
text: 'Primary Button',
),
),
Story(
name: 'Secondary Button',
description: 'A secondary button with different states',
builder: (context) => SecondaryButton(
onPressed: () {},
text: 'Secondary Button',
),
),
],
),
);
}
}
2. 定义 UI 组件
你可以定义一些 UI 组件,例如按钮:
class PrimaryButton extends StatelessWidget {
final VoidCallback onPressed;
final String text;
const PrimaryButton({
required this.onPressed,
required this.text,
});
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPressed,
child: Text(text),
);
}
}
class SecondaryButton extends StatelessWidget {
final VoidCallback onPressed;
final String text;
const SecondaryButton({
required this.onPressed,
required this.text,
});
@override
Widget build(BuildContext context) {
return OutlinedButton(
onPressed: onPressed,
child: Text(text),
);
}
}
3. 运行应用
运行你的 Flutter 应用,你将会看到一个 Storybook 界面,其中包含了你在 Storybook
中定义的所有 Story
。你可以点击不同的 Story
来查看对应的 UI 组件。
高级用法
1. 添加多个 Knobs
storybook_ds
支持使用 Knobs
来动态调整组件的属性。你可以在 Story
中使用 Knobs
来添加交互控件。
Story(
name: 'Button with Knobs',
description: 'A button with dynamic properties',
builder: (context) {
final text = Knobs.text(label: 'Button Text', initialValue: 'Click Me');
final isEnabled = Knobs.boolean(label: 'Enabled', initialValue: true);
return ElevatedButton(
onPressed: isEnabled ? () {} : null,
child: Text(text),
);
},
);
2. 自定义 Storybook 主题
你可以自定义 Storybook
的主题,以适应你的应用风格。
Storybook(
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
stories: [
// 你的 Stories
],
);