Flutter内容生成或策略规划插件playbook_generator的使用

Flutter内容生成或策略规划插件playbook_generator的使用


Playbook
一个用于独立开发UI组件并自动拍摄快照的库。

Playbook

Playbook 是一个库,它提供了一个沙盒来构建UI组件,而无需担心特定于应用程序的依赖关系。它受到了JavaScript前端开发中使用的Storybook的启发。

使用 Playbook 构建的组件可以生成一个独立的应用程序作为活生生的样式指南。这不仅允许你快速审查UI,还可以通过将业务逻辑与组件分离来交付更健壮的设计。

此外,每个组件的快照可以通过单元测试自动生成,并且可以使用任意第三方工具进行视觉回归测试。

对于复杂的现代应用开发来说,敏感地捕捉UI变化并更快地改进它们非常重要。有了 Playbook,你不必费力准备数据,也不必花费人力资源进行手动测试。


Playbook

Playbook 组件以场景的形式唯一存储。一个 Scenario 有布局组件的方式。

Playbook(
  stories: [
    Story(
      'Home',
      scenarios: [
        Scenario(
          'CategoryHome',
          layout: ScenarioLayout.fill(),
          child: CategoryHome(userData: UserData.stub),
        ),
        Scenario(
          'LandmarkList',
          layout: ScenarioLayout.fill(),
          child: Scaffold(
            appBar: AppBar(),
            body: LandmarkList(userData: UserData.stub),
          ),
        ),
        Scenario(
          'Container red',
          layout: ScenarioLayout.fixed(100, 100),
          child: Container(color: Colors.red),
        ),
      ],
    ),
  ],
);

PlaybookUI

PlaybookUI 提供了浏览场景列表的用户界面。

PlaybookGallery

组件可视化被列出并显示。在顶部屏幕上显示的并不是实际的布局,而是高效地在运行时生成的快照。

浏览器 详细

PlaybookSnapshot

场景可以通过符合 TestTool 类型的实例进行测试。Snapshot 就是其中之一,它可以生成所有场景的快照,并模拟给定设备的屏幕大小和安全区域。

Future<void> main() async {
  testWidgets('Take snapshots', (tester) async {
    await Playbook(
      stories: [
        barStory(),
        fooWidgetStory(),
        assetImageStory(),
        homePageStory(),
        scrollableStory(),
      ],
    ).run(
      Snapshot(
        devices: [SnapshotDevice.iPhoneSE2nd],
      ),
      (widget, device) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          theme: ThemeData(
            fontFamily: 'Roboto',
            platform: device.platform,
          ),
          home: widget,
        );
      },
    );
  });
}

生成图像

配置

可以在 pubspec.yaml 中配置字体文件的位置和快照输出目录路径。

playbook_snapshot:
  fonts:
    - family: Roboto
      fonts:
        - asset: assets/fonts/Roboto-Regular.ttf
  # 默认为/snapshots
  snapshot_dir: iOS
  # 默认为空
  sub_dir: service

使用上述设置,快照将保存在以下目录中:

/test/iOS/${DeviceName}/service/${StoryTitle}/${ScenarioTitle}.png

如果想要动态更改路径,可以在 Snapshot 中使用 snapshotDirsubDir 参数。

注意事项

Snapshot(内部 flutter test --update-goldens)需要你自己准备和加载字体。通过在 flutterplaybook_snapshotpubspec.yaml 中定义字体文件位置并准备字体文件,字体文件将自动加载。

flutter:
  fonts:
    - family: Roboto
      fonts:
        - asset: assets/fonts/Roboto-Regular.ttf

或者

playbook_snapshot:
  fonts:
    - family: Roboto
      fonts:
        - asset: assets/fonts/Roboto-Regular.ttf

然后,应该在目录中准备好字体文件。


PlaybookGenerator

支持从任何 .dart 文件生成故事和场景。

// some_story.dart

const storyTitle = 'Home';

@GenerateScenario(
  layout: ScenarioLayout.fill(),
)
Widget $CategoryHome() => CategoryHome(userData: UserData.stub);

@GenerateScenario(
  layout: ScenarioLayout.fill(),
)
Widget $LandmarkList() => Scaffold(
      appBar: AppBar(),
      body: LandmarkList(userData: UserData.stub),
    );

@GenerateScenario(
  title: 'Container red',
  layout: ScenarioLayout.fixed(100, 100),
)
Widget containerRed() => Container(color: Colors.red);

@GenerateScenario(
  title: 'Device pixel ratio',
  layout: ScenarioLayout.fixed(300, 300),
)
Widget devicePixelRatio(BuildContext context) =>
    Text('Device pixel ratio is ${MediaQuery.of(context).devicePixelRatio}');

你可以引用 playbook 实例。

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Playbook Demo',
      theme: ThemeData.light(),
      home: PlaybookGallery(
        title: 'Sample app',
        playbook: playbook,
      ),
    );
  }
}

可以在 build.yaml 中设置glob以查找资产和输出文件名。默认输入值是 lib/**.dart,输出值是 generated_playbook.dart

targets:
  $default:
    builders:
      playbook_generator:stories:
        options:
          input: lib/**.dart
          output: generated_playbook.dart

更多关于Flutter内容生成或策略规划插件playbook_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter内容生成或策略规划插件playbook_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


playbook_generator 似乎不是一个广泛知名的 Flutter 插件或工具。根据你的描述,它可能是一个用于生成内容或策略规划的插件。由于这个插件的信息有限,我将基于常见的 Flutter 插件使用模式,为你提供一个通用的使用指南。如果你能提供更多关于 playbook_generator 的具体信息或文档,我可以为你提供更详细的帮助。

假设的使用步骤

  1. 添加依赖: 首先,你需要在 pubspec.yaml 文件中添加 playbook_generator 插件的依赖。假设这个插件已经发布在 pub.dev 上,你可以这样添加:

    dependencies:
      playbook_generator: ^1.0.0  # 请根据实际情况替换版本号
    

    然后运行 flutter pub get 来获取依赖。

  2. 导入插件: 在你的 Dart 文件中导入插件:

    import 'package:playbook_generator/playbook_generator.dart';
    
  3. 初始化插件: 在使用插件之前,你可能需要初始化它。这通常在 main.dart 文件中完成:

    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await PlaybookGenerator.initialize();  // 假设初始化方法是这样的
      runApp(MyApp());
    }
    
  4. 生成内容或策略: 使用插件生成内容或策略。假设插件提供了一个 generatePlaybook 方法:

    void generatePlaybook() {
      var playbook = PlaybookGenerator.generatePlaybook(
        strategy: 'marketing',  // 假设你需要指定策略类型
        content: 'product launch'  // 假设你需要指定内容类型
      );
      print(playbook);
    }
    
  5. 在 UI 中使用生成的内容: 你可以将生成的内容显示在 Flutter 应用的 UI 中。例如,使用 Text 组件显示生成的策略:

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        var playbook = PlaybookGenerator.generatePlaybook(
          strategy: 'marketing',
          content: 'product launch'
        );
    
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(title: Text('Playbook Generator')),
            body: Center(
              child: Text(playbook),
            ),
          ),
        );
      }
    }
回到顶部