패키지, 저장소 및 앱 카테고리 검색

패키지 상세v1.1.1

video_shop_flutter

TikTok 및 YouTube 스토리와 유사한 쇼핑 비디오 위젯을 생성하기 위한 Flutter 플러그인입니다.

AndroidiOSWebmacOS
30일 다운로드
95
좋아요
27
Pub 점수
140

패키지 설치

flutter pub add video_shop_flutter

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

video_shop_flutter는 TikTok과 YouTube Shorts를 영감으로 삼아 쇼핑 비디오 위젯을 구축하기 위해 설계된 Flutter 플러그인입니다. 개발자가 상호작용 가능하고 스와이프 가능한 비디오 피드에 제품 전시를 내장할 수 있게 해주며, 사용자가 비디오 내에서 직접 아이템을 둘러보고 구매할 수 있도록 합니다. 이 패키지는 Android, iOS, Web, macOS 플랫폼 간에 원활한 통합을 지원하며, 전자상거래 콘텐츠에 네이티브처럼 느껴지는 경험을 제공합니다. 사용자 정의 가능한 UI 컴포넌트와 부드러운 비디오 재생 기능을 통해 매력적인 소셜 코머스 경험을 만들기에 적합합니다.

사용 사례

  • 틱톡 스타일의 쇼핑 영상 만들기
  • 유튜브 샤츠 스타일의 제품 피드 구축
  • 비디오 내 제품 구매 활성화
  • 소셜 미디어 전자상거래 앱 개발
  • 기존 앱에 쇼핑 가능한 비디오 콘텐츠 통합하기

주요 기능

  • 스와이프 가능한 비디오 피드
  • 임베디드 제품 카드
  • 크로스 플랫폼 지원 (Android, iOS, Web, macOS)
  • 인터랙티브 쇼핑 요소
  • 부드러운 비디오 재생 통합

적합한 대상

  • 전자상거래 앱 개발자
  • 소셜 미디어 플랫폼 제작자
  • 디지털 마케터
  • 모바일 앱 팀
  • 콘텐츠 기반 소매 애플리케이션

고려 사항

  • 백엔드 제품 데이터와의 통합이 필요합니다
  • 브랜드 일치를 위해 맞춤 스타일링이 필요할 수 있습니다
  • 외부 비디오 호스팅 서비스에 의존
  • 비디오 기반 쇼핑 경험에 제한됨
  • 고밀도 비디오로 인한 성능 영향 가능성

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

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)

카테고리

의존성

의존성 목록 2 개

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.