Download this code to run Vibreflow locally

How to Run Vibreflow Locally

Open in terminal or command prompt.

The structure will look like this

textmy-project/
├── index.html
├── package.json
├── tsconfig.json
├── vite.config.ts
└── src/
└── main.ts

2. Install Node.js (if needed)

Make sure you have Node.js installed (20 +). You can download it from the official Node.js website.3. Install Vite (if needed)

Node.js — Download Node.js®
Node.js® is a free, open-source, cross-platform JavaScript runtime environment that lets developers create servers, web apps, command line tools and scripts.

In your project directory, run:

npm install vite --save-dev
npm install typescript --save-dev # Skip if you already have TypeScript

3. Install the app

npm install

4. Run the Project

  • Development server:npm run dev
  • Build for production:npm run build
  • Preview production build locally:npm run preview

....and run it

npm run dev

In summary


Prerequisites: Node.js 20+

1. Install dependencies:
npm install
2. Run the app:
npm run dev

5. Open in the Browser

Visit the local server link provided in the terminal Vibreflow

That’s it! Note.

Or test the secure online version

Vibreflow - image to Flutter and Flutterflow Convertor

Free and secure Online Version of Vibreflow

Code Generated by Vibreflow and Cursor

// Automatic FlutterFlow imports
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/widgets/index.dart'; // Imports other custom widgets
import '/custom_code/actions/index.dart'; // Imports custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom widget code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!

import 'index.dart'; // Imports other custom widgets

class CheckoutScreenWidget extends StatefulWidget {
  const CheckoutScreenWidget({
    super.key,
    this.width,
    this.height,
    this.cartShippingPaymentText,
    this.contactInfoTitle,
    this.shippingAddressTitle,
    this.shippingMethodTitle,
    this.standardShippingTitle,
    this.standardShippingSubtitle,
    this.expressShippingTitle,
    this.expressShippingSubtitle,
    this.nextDayShippingTitle,
    this.nextDayShippingSubtitle,
    this.paymentMethodTitle,
    this.creditCardPaymentTitle,
    this.paypalPaymentTitle,
    this.cardNumberHint,
    this.expiryDateHint,
    this.cvcHint,
    this.nameOnCardHint,
    this.placeOrderButtonText,
    this.product1ImagePath,
    this.subtotalLabel,
    this.subtotalValue,
    this.shippingLabel,
    this.shippingValue,
    this.taxesLabel,
    this.taxesValue,
    this.totalLabel,
    this.totalValue,
    this.productImagePaths,
    this.productTitles,
    this.productSizes,
    this.productPrices,
  });

  final double? width;
  final double? height;
  final String? cartShippingPaymentText;
  final String? contactInfoTitle;
  final String? shippingAddressTitle;
  final String? shippingMethodTitle;
  final String? standardShippingTitle;
  final String? standardShippingSubtitle;
  final String? expressShippingTitle;
  final String? expressShippingSubtitle;
  final String? nextDayShippingTitle;
  final String? nextDayShippingSubtitle;
  final String? paymentMethodTitle;
  final String? creditCardPaymentTitle;
  final String? paypalPaymentTitle;
  final String? cardNumberHint;
  final String? expiryDateHint;
  final String? cvcHint;
  final String? nameOnCardHint;
  final String? placeOrderButtonText;
  final List<String>? productImagePaths;
  final List<String>? productTitles;
  final List<String>? productSizes;
  final List<double>? productPrices;
  final String? subtotalLabel;
  final String? subtotalValue;
  final String? shippingLabel;
  final String? shippingValue;
  final String? taxesLabel;
  final String? taxesValue;
  final String? totalLabel;
  final String? totalValue;

  @override
  State<CheckoutScreenWidget> createState() => _CheckoutScreenWidgetState();
}

class _CheckoutScreenWidgetState extends State<CheckoutScreenWidget> {
  String? _selectedShippingMethod = 'standard';
  String? _selectedPaymentMethod = 'credit_card';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: SingleChildScrollView(
        child: Padding(
          padding: const EdgeInsets.all(32.0),
          child: Row(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Expanded(
                flex: 3,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      widget.cartShippingPaymentText ??
                          'Cart / Shipping / Payment',
                      style: const TextStyle(color: Colors.grey, fontSize: 14),
                    ),
                    const SizedBox(height: 32),
                    Text(
                      widget.contactInfoTitle ?? 'Contact Information',
                      style: const TextStyle(
                          fontSize: 20,
                          fontWeight: FontWeight.bold,
                          color: Colors.black87),
                    ),
                    const SizedBox(height: 16),
                    _buildTextField(hintText: ''),
                    const SizedBox(height: 32),
                    Text(
                      widget.shippingAddressTitle ?? 'Shipping Address',
                      style: const TextStyle(
                          fontSize: 20,
                          fontWeight: FontWeight.bold,
                          color: Colors.black87),
                    ),
                    const SizedBox(height: 16),
                    _buildTextField(hintText: ''),
                    const SizedBox(height: 16),
                    _buildTextField(hintText: ''),
                    const SizedBox(height: 16),
                    _buildTextField(hintText: ''),
                    const SizedBox(height: 16),
                    Row(
                      children: [
                        Expanded(child: _buildTextField(hintText: '')),
                        const SizedBox(width: 16),
                        Expanded(child: _buildTextField(hintText: '')),
                      ],
                    ),
                    const SizedBox(height: 16),
                    _buildTextField(hintText: ''),
                    const SizedBox(height: 32),
                    Text(
                      widget.shippingMethodTitle ?? 'Shipping Method',
                      style: const TextStyle(
                          fontSize: 20,
                          fontWeight: FontWeight.bold,
                          color: Colors.black87),
                    ),
                    const SizedBox(height: 16),
                    _buildShippingMethodRadio(
                      value: 'standard',
                      title: widget.standardShippingTitle ??
                          'Standard (5-7 business days)',
                      subtitle: widget.standardShippingSubtitle ?? 'Free',
                    ),
                    _buildShippingMethodRadio(
                      value: 'express',
                      title: widget.expressShippingTitle ??
                          'Express (2-3 business days)',
                      subtitle: widget.expressShippingSubtitle ?? '\$10',
                    ),
                    _buildShippingMethodRadio(
                      value: 'next_day',
                      title: widget.nextDayShippingTitle ??
                          'Next Day (1 business day)',
                      subtitle: widget.nextDayShippingSubtitle ?? '\$20',
                    ),
                    const SizedBox(height: 32),
                    Text(
                      widget.paymentMethodTitle ?? 'Payment Method',
                      style: const TextStyle(
                          fontSize: 20,
                          fontWeight: FontWeight.bold,
                          color: Colors.black87),
                    ),
                    const SizedBox(height: 16),
                    _buildPaymentMethodRadio(
                      value: 'credit_card',
                      title: widget.creditCardPaymentTitle ?? 'Credit Card',
                    ),
                    _buildPaymentMethodRadio(
                      value: 'paypal',
                      title: widget.paypalPaymentTitle ?? 'PayPal',
                    ),
                    const SizedBox(height: 16),
                    _buildTextField(
                        hintText: widget.cardNumberHint ?? 'Card Number'),
                    const SizedBox(height: 16),
                    Row(
                      children: [
                        Expanded(
                            child: _buildTextField(
                                hintText: widget.expiryDateHint ?? 'MM/YY')),
                        const SizedBox(width: 16),
                        Expanded(
                            child: _buildTextField(
                                hintText: widget.cvcHint ?? 'CVC')),
                      ],
                    ),
                    const SizedBox(height: 16),
                    _buildTextField(
                        hintText: widget.nameOnCardHint ?? 'Name on Card'),
                    const SizedBox(height: 32),
                    SizedBox(
                      width: 150,
                      child: ElevatedButton(
                        onPressed: () {
                          // Handle place order
                        },
                        style: ElevatedButton.styleFrom(
                          backgroundColor: Colors.blue[700],
                          padding: const EdgeInsets.symmetric(vertical: 16),
                          shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(8.0),
                          ),
                        ),
                        child: Text(
                          widget.placeOrderButtonText ?? 'Place Order',
                          style: const TextStyle(
                              color: Colors.white, fontSize: 16),
                        ),
                      ),
                    ),
                  ],
                ),
              ),
              const SizedBox(width: 64),
              Expanded(
                flex: 2,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    if (widget.productImagePaths != null &&
                        widget.productTitles != null &&
                        widget.productSizes != null)
                      ...List.generate(widget.productImagePaths!.length,
                          (index) {
                        final price = (widget.productPrices != null &&
                                widget.productPrices!.length > index)
                            ? widget.productPrices![index]
                            : 10.0;
                        return Column(
                          children: [
                            _buildProductItemWithPrice(
                              imagePath: widget.productImagePaths![index],
                              title: widget.productTitles![index],
                              size: widget.productSizes![index],
                              price: price,
                            ),
                            const SizedBox(height: 16),
                          ],
                        );
                      }),
                    const SizedBox(height: 32),
                    _buildSummaryRow(widget.subtotalLabel ?? 'Subtotal',
                        widget.subtotalValue ?? '\$150'),
                    const SizedBox(height: 8),
                    _buildSummaryRow(widget.shippingLabel ?? 'Shipping',
                        widget.shippingValue ?? 'Free'),
                    const SizedBox(height: 8),
                    _buildSummaryRow(widget.taxesLabel ?? 'Taxes',
                        widget.taxesValue ?? '\$15'),
                    const SizedBox(height: 16),
                    _buildSummaryRow(widget.totalLabel ?? 'Total',
                        widget.totalValue ?? '\$165',
                        isTotal: true),
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Widget _buildTextField({required String hintText}) {
    return TextField(
      decoration: InputDecoration(
        hintText: hintText,
        filled: true,
        fillColor: Colors.grey[100],
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(8.0),
          borderSide: BorderSide.none,
        ),
        contentPadding:
            const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
      ),
    );
  }

  Widget _buildShippingMethodRadio({
    required String value,
    required String title,
    required String subtitle,
  }) {
    return Container(
      margin: const EdgeInsets.only(bottom: 8),
      decoration: BoxDecoration(
        color: Colors.grey[100],
        borderRadius: BorderRadius.circular(8.0),
      ),
      child: RadioListTile<String>(
        value: value,
        groupValue: _selectedShippingMethod,
        onChanged: (String? newValue) {
          setState(() {
            _selectedShippingMethod = newValue;
          });
        },
        title: Text(
          title,
          style: const TextStyle(fontWeight: FontWeight.w500),
        ),
        subtitle: Text(subtitle),
        activeColor: Colors.black,
        controlAffinity: ListTileControlAffinity.leading,
        contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
      ),
    );
  }

  Widget _buildPaymentMethodRadio({
    required String value,
    required String title,
  }) {
    return Container(
      margin: const EdgeInsets.only(bottom: 8),
      decoration: BoxDecoration(
        color: Colors.grey[100],
        borderRadius: BorderRadius.circular(8.0),
      ),
      child: RadioListTile<String>(
        value: value,
        groupValue: _selectedPaymentMethod,
        onChanged: (String? newValue) {
          setState(() {
            _selectedPaymentMethod = newValue;
          });
        },
        title: Text(
          title,
          style: const TextStyle(fontWeight: FontWeight.w500),
        ),
        activeColor: Colors.black,
        controlAffinity: ListTileControlAffinity.leading,
        contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
      ),
    );
  }

  Widget _buildProductItem({
    required String imagePath,
    required String title,
    required String size,
  }) {
    return Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          width: 60,
          height: 60,
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(8.0),
            color: Colors.grey[200],
          ),
          child: ClipRRect(
            borderRadius: BorderRadius.circular(8.0),
            child: Image.network(
              imagePath,
              fit: BoxFit.cover,
              errorBuilder: (context, error, stackTrace) => const Icon(
                  Icons.image_not_supported,
                  size: 40,
                  color: Colors.grey),
            ),
          ),
        ),
        const SizedBox(width: 16),
        Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              title,
              style: const TextStyle(fontWeight: FontWeight.w500, fontSize: 16),
            ),
            Text(
              size,
              style: const TextStyle(color: Colors.grey, fontSize: 14),
            ),
          ],
        ),
      ],
    );
  }

  Widget _buildProductItemWithPrice({
    required String imagePath,
    required String title,
    required String size,
    required double price,
  }) {
    return Row(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Container(
          width: 60,
          height: 60,
          decoration: BoxDecoration(
            borderRadius: BorderRadius.circular(8.0),
            color: Colors.grey[200],
          ),
          child: ClipRRect(
            borderRadius: BorderRadius.circular(8.0),
            child: Image.network(
              imagePath,
              fit: BoxFit.cover,
              errorBuilder: (context, error, stackTrace) => const Icon(
                  Icons.image_not_supported,
                  size: 40,
                  color: Colors.grey),
            ),
          ),
        ),
        const SizedBox(width: 16),
        Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              title,
              style: const TextStyle(fontWeight: FontWeight.w500, fontSize: 16),
            ),
            Text(
              size,
              style: const TextStyle(color: Colors.grey, fontSize: 14),
            ),
            Text(
              ' 24${price.toStringAsFixed(2)}',
              style: const TextStyle(
                  color: Colors.black87,
                  fontSize: 14,
                  fontWeight: FontWeight.w500),
            ),
          ],
        ),
      ],
    );
  }

  Widget _buildSummaryRow(String label, String value, {bool isTotal = false}) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        Text(
          label,
          style: TextStyle(
            fontSize: isTotal ? 18 : 16,
            fontWeight: isTotal ? FontWeight.bold : FontWeight.normal,
            color: isTotal ? Colors.black : Colors.grey[700],
          ),
        ),
        Text(
          value,
          style: TextStyle(
            fontSize: isTotal ? 18 : 16,
            fontWeight: isTotal ? FontWeight.bold : FontWeight.normal,
            color: isTotal ? Colors.black : Colors.black87,
          ),
        ),
      ],
    );
  }
}
// Automatic FlutterFlow imports
import '/flutter_flow/flutter_flow_theme.dart';
import '/flutter_flow/flutter_flow_util.dart';
import '/custom_code/widgets/index.dart'; // Imports other custom widgets
import '/custom_code/actions/index.dart'; // Imports custom actions
import '/flutter_flow/custom_functions.dart'; // Imports custom functions
import 'package:flutter/material.dart';
// Begin custom widget code
// DO NOT REMOVE OR MODIFY THE CODE ABOVE!

import 'index.dart'; // Imports other custom widgets

import 'index.dart'; // Imports other custom widgets

class ProductCardWidget extends StatefulWidget {
  const ProductCardWidget({
    super.key,
    this.width,
    this.height,
    this.imageUrl,
    this.productTitle,
    this.totalPrice,
    this.pricePerUnit,
    this.sellerName,
    this.productVariant,
    this.isInStock,
    this.initialQuantity,
    this.actionQuantity,
  });

  final double? width;
  final double? height;
  final String? imageUrl;
  final String? productTitle;
  final double? totalPrice;
  final double? pricePerUnit;
  final String? sellerName;
  final String? productVariant;
  final bool? isInStock;
  final int? initialQuantity;
  final Future Function(int? quantity)? actionQuantity;

  @override
  State<ProductCardWidget> createState() => _ProductCardWidgetState();
}

class _ProductCardWidgetState extends State<ProductCardWidget> {
  late int _quantity;

  @override
  void initState() {
    super.initState();
    _quantity = widget.initialQuantity ?? 1;
  }

  @override
  Widget build(BuildContext context) {
    return SizedBox(
      width: widget.width,
      height: widget.height,
      child: Card(
        margin: const EdgeInsets.all(16.0),
        elevation: 2.0,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(12.0),
        ),
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: IntrinsicHeight(
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                ClipRRect(
                  borderRadius: BorderRadius.circular(8.0),
                  child: Container(
                    width: 100,
                    height: 100,
                    color: FlutterFlowTheme.of(context).alternate,
                    child: Center(
                      child: Image.network(
                        widget.imageUrl ??
                            'https://via.placeholder.com/100x100?text=Product',
                        fit: BoxFit.cover,
                        errorBuilder: (context, error, stackTrace) => Icon(
                          Icons.image,
                          size: 50,
                          color: FlutterFlowTheme.of(context).secondaryText,
                        ),
                      ),
                    ),
                  ),
                ),
                const SizedBox(width: 16.0),
                Expanded(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Row(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Expanded(
                            child: Text(
                              widget.productTitle ??
                                  'Product Title with Long Description',
                              style: FlutterFlowTheme.of(context)
                                  .bodyMedium
                                  .override(
                                    fontFamily: FlutterFlowTheme.of(context)
                                        .bodyMediumFamily,
                                    color: FlutterFlowTheme.of(context)
                                        .primaryText,
                                    fontSize: 16.0,
                                    fontWeight: FontWeight.bold,
                                  ),
                              maxLines: 2,
                              overflow: TextOverflow.ellipsis,
                            ),
                          ),
                          const SizedBox(width: 16.0),
                          Column(
                            crossAxisAlignment: CrossAxisAlignment.end,
                            children: [
                              Text(
                                widget.totalPrice != null
                                    ? '\$${widget.totalPrice!.toStringAsFixed(2)}'
                                    : '\$0.00',
                                style: FlutterFlowTheme.of(context)
                                    .bodyMedium
                                    .override(
                                      fontFamily: FlutterFlowTheme.of(context)
                                          .bodyMediumFamily,
                                      color: FlutterFlowTheme.of(context)
                                          .primaryText,
                                      fontSize: 16.0,
                                      fontWeight: FontWeight.bold,
                                    ),
                              ),
                              Text(
                                widget.pricePerUnit != null
                                    ? '\$${widget.pricePerUnit!.toStringAsFixed(2)} each'
                                    : '\$0.00 each',
                                style: FlutterFlowTheme.of(context)
                                    .bodyMedium
                                    .override(
                                      fontFamily: FlutterFlowTheme.of(context)
                                          .bodyMediumFamily,
                                      color: FlutterFlowTheme.of(context)
                                          .secondaryText,
                                      fontSize: 13.0,
                                    ),
                              ),
                            ],
                          ),
                        ],
                      ),
                      const SizedBox(height: 4.0),
                      Text(
                        widget.sellerName ?? 'Sold by Seller Name',
                        style: FlutterFlowTheme.of(context).bodyMedium.override(
                              fontFamily:
                                  FlutterFlowTheme.of(context).bodyMediumFamily,
                              color: FlutterFlowTheme.of(context).secondaryText,
                              fontSize: 13.0,
                            ),
                      ),
                      const SizedBox(height: 2.0),
                      Text(
                        widget.productVariant ?? 'Variant, Size',
                        style: FlutterFlowTheme.of(context).bodyMedium.override(
                              fontFamily:
                                  FlutterFlowTheme.of(context).bodyMediumFamily,
                              color: FlutterFlowTheme.of(context).secondaryText,
                              fontSize: 13.0,
                            ),
                      ),
                      const SizedBox(height: 8.0),
                      Row(
                        children: [
                          Icon(
                            (widget.isInStock ?? true)
                                ? Icons.check_circle_outline
                                : Icons.cancel_outlined,
                            color: (widget.isInStock ?? true)
                                ? FlutterFlowTheme.of(context).success
                                : FlutterFlowTheme.of(context).error,
                            size: 16.0,
                          ),
                          const SizedBox(width: 4.0),
                          Text(
                            (widget.isInStock ?? true)
                                ? 'In Stock'
                                : 'Out of Stock',
                            style: FlutterFlowTheme.of(context)
                                .bodyMedium
                                .override(
                                  fontFamily: FlutterFlowTheme.of(context)
                                      .bodyMediumFamily,
                                  color: (widget.isInStock ?? true)
                                      ? FlutterFlowTheme.of(context).success
                                      : FlutterFlowTheme.of(context).error,
                                  fontSize: 13.0,
                                ),
                          ),
                        ],
                      ),
                      const Spacer(),
                      Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: [
                          Row(
                            children: [
                              Text(
                                'Qty:',
                                style: FlutterFlowTheme.of(context)
                                    .bodyMedium
                                    .override(
                                      fontFamily: FlutterFlowTheme.of(context)
                                          .bodyMediumFamily,
                                      color: FlutterFlowTheme.of(context)
                                          .primaryText,
                                      fontSize: 14.0,
                                    ),
                              ),
                              const SizedBox(width: 8.0),
                              Container(
                                decoration: BoxDecoration(
                                  border: Border.all(
                                      color: FlutterFlowTheme.of(context)
                                          .alternate),
                                  borderRadius: BorderRadius.circular(8.0),
                                ),
                                child: Row(
                                  mainAxisSize: MainAxisSize.min,
                                  children: [
                                    InkWell(
                                      onTap: () async {
                                        setState(() {
                                          if (_quantity > 1) _quantity--;
                                        });
                                        if (widget.actionQuantity != null) {
                                          await widget
                                              .actionQuantity!(_quantity);
                                        }
                                      },
                                      child: Padding(
                                        padding: const EdgeInsets.symmetric(
                                            horizontal: 12.0, vertical: 8.0),
                                        child: Icon(Icons.remove,
                                            size: 18.0,
                                            color: FlutterFlowTheme.of(context)
                                                .secondaryText),
                                      ),
                                    ),
                                    Container(
                                      width: 1.0,
                                      height: 30.0,
                                      color: FlutterFlowTheme.of(context)
                                          .alternate,
                                    ),
                                    Padding(
                                      padding: const EdgeInsets.symmetric(
                                          horizontal: 16.0, vertical: 8.0),
                                      child: Text(
                                        '$_quantity',
                                        style: FlutterFlowTheme.of(context)
                                            .bodyMedium
                                            .override(
                                              fontFamily:
                                                  FlutterFlowTheme.of(context)
                                                      .bodyMediumFamily,
                                              color:
                                                  FlutterFlowTheme.of(context)
                                                      .primaryText,
                                              fontSize: 14.0,
                                              fontWeight: FontWeight.bold,
                                            ),
                                      ),
                                    ),
                                    Container(
                                      width: 1.0,
                                      height: 30.0,
                                      color: FlutterFlowTheme.of(context)
                                          .alternate,
                                    ),
                                    InkWell(
                                      onTap: () async {
                                        setState(() {
                                          _quantity++;
                                        });
                                        if (widget.actionQuantity != null) {
                                          await widget
                                              .actionQuantity!(_quantity);
                                        }
                                      },
                                      child: Padding(
                                        padding: const EdgeInsets.symmetric(
                                            horizontal: 12.0, vertical: 8.0),
                                        child: Icon(Icons.add,
                                            size: 18.0,
                                            color: FlutterFlowTheme.of(context)
                                                .secondaryText),
                                      ),
                                    ),
                                  ],
                                ),
                              ),
                            ],
                          ),
                          Row(
                            children: [
                              TextButton.icon(
                                onPressed: () {},
                                icon: Icon(Icons.favorite_border,
                                    size: 18.0,
                                    color: FlutterFlowTheme.of(context)
                                        .secondaryText),
                                label: Text(
                                  'Save for Later',
                                  style: FlutterFlowTheme.of(context)
                                      .bodyMedium
                                      .override(
                                        fontFamily: FlutterFlowTheme.of(context)
                                            .bodyMediumFamily,
                                        color: FlutterFlowTheme.of(context)
                                            .secondaryText,
                                        fontSize: 13.0,
                                      ),
                                ),
                                style: TextButton.styleFrom(
                                  padding: EdgeInsets.zero,
                                  minimumSize: Size.zero,
                                  tapTargetSize:
                                      MaterialTapTargetSize.shrinkWrap,
                                ),
                              ),
                              const SizedBox(width: 16.0),
                              TextButton.icon(
                                onPressed: () {},
                                icon: Icon(Icons.delete_outline,
                                    size: 18.0,
                                    color: FlutterFlowTheme.of(context)
                                        .secondaryText),
                                label: Text(
                                  'Remove',
                                  style: FlutterFlowTheme.of(context)
                                      .bodyMedium
                                      .override(
                                        fontFamily: FlutterFlowTheme.of(context)
                                            .bodyMediumFamily,
                                        color: FlutterFlowTheme.of(context)
                                            .secondaryText,
                                        fontSize: 13.0,
                                      ),
                                ),
                                style: TextButton.styleFrom(
                                  padding: EdgeInsets.zero,
                                  minimumSize: Size.zero,
                                  tapTargetSize:
                                      MaterialTapTargetSize.shrinkWrap,
                                ),
                              ),
                            ],
                          ),
                        ],
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}