Search packages, repositories and app categories

Package detailsv1.1.1

video_shop_flutter

A Flutter plugin to create shopping video widget like Tiktok and Youtube shorts.

AndroidiOSWebmacOS
30-day downloads
95
Likes
27
Pub points
140

Install package

flutter pub add video_shop_flutter

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

video_shop_flutter is a Flutter plugin designed to build shopping video widgets inspired by TikTok and YouTube Shorts. It enables developers to integrate interactive, swipeable video feeds with embedded product showcases, allowing users to browse and purchase items directly within videos. The package supports seamless integration across Android, iOS, Web, and macOS platforms, offering a native-like experience for e-commerce content. With customizable UI components and smooth video playback, it's ideal for creating engaging social commerce experiences.

Use cases

  • Creating TikTok-style shopping videos
  • Building YouTube Shorts-inspired product feeds
  • Enabling in-video product purchases
  • Developing social media e-commerce apps
  • Integrating shoppable video content into existing apps

Key features

  • Swipeable video feed
  • Embedded product cards
  • Cross-platform support (Android, iOS, Web, macOS)
  • Interactive shopping elements
  • Smooth video playback integration

Suitable for

  • E-commerce app developers
  • Social media platform creators
  • Digital marketers
  • Mobile app teams
  • Content-driven retail applications

Considerations

  • Requires integration with backend product data
  • May need custom styling for brand alignment
  • Depends on external video hosting services
  • Limited to video-based shopping experiences
  • Potential performance impact with high video density

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

Flutter Shopping Video: Create video player layout like tiktok.

Features

Video player layout:

Getting started

First, add video_shop_flutter as a dependency in your pubspec.yaml file.

Example

import 'package:example/service/service.dart';
import 'package:example/widgets/like_widget.dart';
import 'package:flutter/material.dart';
import 'package:video_shop_flutter/page/page.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      debugShowCheckedModeBanner: false,
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<Map<String, dynamic>> data = [];
  ApiService service = ApiService();
  List<String> videoWatched = [];

  @override
  void initState() {
    super.initState();
  }

  @override
  void didChangeDependencies() async {
    List<Map<String, dynamic>> response = await service.mapData(1, 4);
    setState(() {
      data = response;
    });
    super.didChangeDependencies();
  }

  @override
  Widget build(BuildContext context) {
    debugPrint("\n data length: ${data.length} \n");

    return Scaffold(
      body: VideoShopFlutter(
        // Called every time video page is changed.
        updateLastSeenPage: (lastSeenPageIndex) {},
        // Video data.
        listData: data,
        // Watched videos, it's updated every time new video is watched.
        videoWatched: videoWatched,
        pageSize: 4,
        enableBackgroundContent: true,
        // Load more video data.
        loadMore: (page, pageSize) async {
          // Just for test.
          debugPrint("load more...");
          debugPrint("Video $videoWatched");
          List<Map<String, dynamic>> newData =
              await service.mapData((page + 2), 4);
          if (newData.isNotEmpty) {
            setState(() {
              data = [...data, ...newData];
            });
          }
          //.
        },
        // Your custom widget.
        likeWidget: (video, updateData) {
          return LikeWidget(
            likes: video?.likes ?? 0,
            liked: video?.liked ?? false,
            updateData: updateData,
            id: video?.id,
          );
        },
      ),
    );
  }
}

Note

  • listData in VideoShopFlutter(listData: playList,)

    The listData is a list of Map, each Map is a Video object and video object required some field of data like this:

     {
       'id': 123,
       'url': 'https://video.mp4'
       'thumbnail': 'https://thumbnail.jpg'
       'video_title': 'title',
       'description': 'description',
       'likes': 5 ,
       'liked': true,
       'product_name': 'productName',
       'product_permalink': 'productPermalink',
       'stock_status': 'stockStatus',
     }
    

    Please follow above format data.

    The pageSize is size of list data every time load more data, it affects when to load more data.

    The loadMore is a function to load more data, it is called every time current PageView is at position: listData.length - (pageSize/2)

Categories

Dependencies

Dependency list 2 items

Source repository

Projects using this package

No data available yet.