jamesblasco / flutter_preview

Flutter | Because a widget-driven development requires a widget-driven preview.
MIT License
255 stars 23 forks source link
flutter preview vscode vscode-extension


Create samples of your widgets and preview them in real time

This project is experimental but safe to use as not code is added during compilation. It won't be stable until Flutter web or desktop reaches a stable version too.

Getting Started

Install

Run the preview

Adding a preview

A vscode snippet is availabe for creating a preview, just type preview and it will appear.

Taking the most of Flutter Preview

Preview Widget

The Preview widget allows you to give default values that will impact your widget inside. The current availabe values are:

Also you can set a update mode for each preview from hot-reload to hot-restart;

PreviewProvider

You can use multiple classes that extend PreviewProvider and they will be displayed in different tabs.

By default the name of the tab will be the class name but you can override the title param to customize it.

Custom Providers

PreviewProvider allows you to group different Previews in a single file. While this can be enough for most, you might want to create your own previews. For that you can extend any widget that extends StatelessWidget and make it implement the mixin Previewer;

class MyCustomPreview extends StatelessWidget with Previewer {
 @override
 Widget build(BuildContext context) {
    return Container();
  }
}

It is important to add with Previewer always when extending any class, otherwise it won't be recognized by Flutter Preview.

A already built-in custom provider is ResizablePreviewProvider that gives you the freedom to resize a widget to see how it could look in different scenarios.

class Resizable extends ResizablePreviewProvider with Previewer {
  @override
  Preview get preview {
    return Preview(
      mode: UpdateMode.hotReload,
      child: MusicCard(
        title: 'Blond',
        singer: 'Frank Ocean',
        image: PreviewImage.asset('preview_assets/cover1.jpg'),
        onTap: () => {},
      ),
    );
  }
}

You can build any other previews or use any packages if you respect this two important rules

Let's see a cool example using the device_preview package

```dart class DevicePreviewProvider extends StatelessWidget with Previewer { @override String get title => 'Device Preview'; @override Widget build(BuildContext context) { return DevicePreview( builder: (context) => MyApp(), ); } } ```

Using sample assets

Adding sample assets to your flutter can increase the app without no need.

For images, you can NetworkImage as before.

But if you want to use local images, don't add them to your flutter project!

You can use PreviewImage instead.

//DON'T
AssetImage('images/example.png')

//DO
PreviewImage('debug_images/example.png')
# pubspec.yaml

assets:
  images/dart.png

Other assets will be supported soon

Something is not working as expected?

Create a new issue and I will take it a look