widget_snippet 0.1.1 copy "widget_snippet: ^0.1.1" to clipboard
widget_snippet: ^0.1.1 copied to clipboard

A Flutter package for showcasing widget code snippets. Display, copy, and download widget previews with their source code in various presentation formats.

Widget Snippet Icon #

platform pub package pub points documentation interactive demo last updated by

A Flutter package for showcasing widget code snippets. Display, copy, and download widget previews with their source code in various presentation formats.

Try it out in the demo app.

Features #

  • Widget Preview + Source Code Viewer: Show the widget alongside its source code
  • Multiple Display Options: Present code snippets in various formats to suit different use cases (e.g., row, column, tabbed)
  • Terminal Style Code View: Display code snippets in a terminal window
  • Easy Export: Download widgets as images, copy code snippets, or export both as a zip file
  • Customizable Appearance: Style the presentation based on your app's theme

Usage #

Basic Example #

import 'package:flutter/material.dart';
import 'package:widget_snippet/widget_snippet.dart';

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  // Define your widget
  static final Widget myCustomWidget = Container(
    width: 200,
    height: 200,
    decoration: BoxDecoration(
      color: Colors.blue,
      borderRadius: BorderRadius.circular(16),
      boxShadow: [
        BoxShadow(
          color: Colors.black26,
          blurRadius: 10,
          offset: const Offset(0, 5),
        ),
      ],
    ),
    child: const Center(
      child: Text(
        'Hello, Widget Snippet!',
        style: TextStyle(
          color: Colors.white,
          fontSize: 18,
          fontWeight: FontWeight.bold,
        ),
      ),
    ),
  );

  // The source code for your widget
  static final String sourceCode = '''
Container(
  width: 200,
  height: 200,
  decoration: BoxDecoration(
    color: Colors.blue,
    borderRadius: BorderRadius.circular(16),
    boxShadow: [
      BoxShadow(
        color: Colors.black26,
        blurRadius: 10,
        offset: const Offset(0, 5),
      ),
    ],
  ),
  child: const Center(
    child: Text(
      'Hello, Widget Snippet!',
      style: TextStyle(
        color: Colors.white,
        fontSize: 18,
        fontWeight: FontWeight.bold,
      ),
    ),
  ),
);
''';

  @override
  Widget build(BuildContext context) {
   return Scaffold(
      appBar: AppBar(title: const Text('Widget Snippet Demo')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            // Display the widget inline
            SizedBox(
              height: 400,
              child: WidgetSnippet(
                widget: myCustomWidget,
                sourceCode: sourceCode,
              ),
            ),
            const SizedBox(height: 20),
            // Button to show the widget in a responsive modal
            ElevatedButton(
              onPressed: () {
                WidgetSnippet.showModal(
                  context: context,
                  widget: myCustomWidget,
                  sourceCode: sourceCode,
                );
              },
              child: const Text('Show in Responsive Modal'),
            ),
            const SizedBox(height: 8),
            // Button to show the widget in a bottom sheet
            ElevatedButton(
              onPressed: () {
                WidgetSnippet.showBottomSheet(
                  context: context,
                  widget: myCustomWidget,
                  sourceCode: sourceCode,
                );
              },
              child: const Text('Show in Bottom Sheet'),
            ),
            // Button to show the widget in a dialog
            ElevatedButton(
              onPressed: () {
                WidgetSnippet.showPopup(
                  context: context,
                  widget: myCustomWidget,
                  sourceCode: sourceCode,
                );
              },
              child: const Text('Show in Popup'),
            ),
            // Button to show the widget in full screen
            ElevatedButton(
              onPressed: () {
                WidgetSnippet.showFullScreen(
                  context: context,
                  widget: myCustomWidget,
                  sourceCode: sourceCode,
                );
              },
              child: const Text('Show in Full Screen'),
            ),
          ],
        ),
      ),
    );
  }
}

Display Methods #

Widget Snippet provides multiple ways to display your widgets:

  • WidgetSnippet(): Renders the widget and its code inline

  • WidgetSnippet.showModal(): Calls showPopup() if the screen width is greater than 600px, otherwise showBottomSheet()

  • WidgetSnippet.showBottomSheet(): Shows a bottom sheet containing the widget preview, code snippet, and download zip button.

    • DisplayMode defaults to DisplayMode.column.
  • WidgetSnippet.showPopup(): Shows a centered dialog containing the widget preview, code snippet, and download zip button.

    • DisplayMode defaults to DisplayMode.row if the screen width is greater than 800px, otherwise DisplayMode.tabbed.
  • WidgetSnippet.showFullScreen(): Navigates to a full-screen page displaying the widget and its code

    • DisplayMode defaults to DisplayMode.tabbed if a widget is provided, otherwise DisplayMode.column.

The default display mode can be overridden by setting the displayMode property in the WidgetSnippetConfig.

Customization #

You can customize the appearance and behavior of your widget snippets using the WidgetSnippetConfig class:

WidgetSnippet(
  widget: myCustomWidget,
  sourceCode: sourceCode,
  config: WidgetSnippetConfig(
    // The title to display for the widget preview and file name
    title: 'Customization Example',

    // How to display the widget and code
    displayMode: DisplayMode.tabbed,

    // Spacing between widget and code
    spacing: 16,

    // The maximum number of lines to show in the code view
    maxLines: 20,

    // Terminal style (for terminal display mode)
    terminalStyle: const TerminalStyle(
      title: 'Code Snippet',
      brightness: Brightness.dark,
    ),
  ),
)

Display Modes #

  • DisplayMode.row: Widget and code side by side (horizontal layout)
  • DisplayMode.column: Widget above the code (vertical layout)
  • DisplayMode.tabbed: Switch between widget and code with tabs (useful for small screens)

Terminal Style #

You can create terminal-style code viewers with customizable appearance:

WidgetSnippet(
  widget: myCustomWidget,
  sourceCode: sourceCode,
  config: WidgetSnippetConfig(
    terminalStyle: const TerminalStyle(
      title: 'Flutter Terminal',
      brightness: Brightness.dark,
    ),
  ),
)
2
likes
160
points
70
downloads
screenshot

Publisher

verified publisherintuosol.com

Weekly Downloads

A Flutter package for showcasing widget code snippets. Display, copy, and download widget previews with their source code in various presentation formats.

Repository (GitHub)
View/report issues

Topics

#ui #documentation #code-snippet #showcase

Documentation

API reference

License

MIT (license)

Dependencies

archive, code_text_field, flutter, flutter_highlight, highlight, path_provider, screenshot, url_launcher, web

More

Packages that depend on widget_snippet