Flutter故事视图展示插件easydev_story_view的使用

Flutter故事视图展示插件easydev_story_view的使用

easydev_story_view

这是一个用于在应用程序中展示故事的Flutter小部件,采用easydev ui套件。它提供了暂停、切换和关闭故事的手势动画,并且可以自定义故事。

屏幕截图

这个Flutter小部件用于在应用中展示故事,并采用easydev ui套件。它支持手势来暂停、前进、回到上一页,并且能够自定义故事。

特性

  • 支持通过手势暂停、切换故事并带有拖动动画来关闭。
  • 内置对图片和视频的支持,还可以创建自定义的故事。
  • 带有动画进度指示器。
  • 内置底部信息栏,也可以创建自定义底部信息栏。
  • 控制器用于管理故事。

安装

要使用这个包,在pubspec.yaml文件中添加easydev_story_vieweasydev_theme作为依赖项。

dependencies:
  easydev_story_view: ^x.x.x
  easydev_theme: ^x.x.x

使用

导入包:

import "package:easydev_story_view/easydev_story_view.dart";

EasyDevStory必须被EasyDevTheme包裹。你可以手动提供主题,例如使用EasyDevTheme(来自easydev_theme包)、ThemeCupertinoTheme,或者使用自动提供主题的小部件,例如EasyDevApp(来自easydev_basics包)、MaterialAppCupertinoApp

基础用法

EasyDevStory

使用EasyDevStory向屏幕或视图层次结构中添加故事。EasyDevStory需要storyCount来确定将显示多少个故事,storyBuilder来构建故事,sliderBuilder来构建每个故事的列表项。

EasyDevStory(
  storyCount: 10,
  storyBuilder: (storyIndex) => Story(...),
  sliderBuilder: (storyIndex) => ...
),
Story

Story需要contentCount来确定故事中将显示多少个页面,contentBuilder来构建故事内容。在contentBuilder中必须返回EasyDevStoryContent小部件。

Story(
  contentCount: 5,
  contentBuilder: (contentIndex) => EasyDevStoryContent(...),
),
EasyDevStoryContent

有三种内置的EasyDevStoryContent

  • ImageContent 用于显示图片。
  • VideoContent 用于显示视频。
  • SimpleCustomContent 用于显示同步内容。

要创建自定义内容,需要创建一个继承自StoryContent的小部件。

滑块项目

有两种内置的滑块项目用于sliderBuilder

  • SimpleCustomSlideItem 用于显示同步内容。
  • ImageNetworkSlideItem 用于显示网络图片。

你可以创建自己的自定义滑块项目并传递给sliderBuilder

基本示例

以下是一个基本的使用故事的例子:

...
@override
Widget build(BuildContext context) {
  const firstStoryContent = [
    ImageContent(
      url: 'https://loremflickr.com/600/900',
      timeout: Duration(seconds: 10),
      duration: Duration(seconds: 15),
    ),
    VideoContent(
      url: 'https://flutter.github.io/assets-for-api-docs/assets/videos/butterfly.mp4',
      timeout: Duration(seconds: 10),
    ),
  ];

  final secondStoryContent = [
    SimpleCustomContent(
      duration: const Duration(seconds: 5),
      builder: (context) {
        return const Text('Simple custom story 1');
      },
    ),
    SimpleCustomContent(
      duration: const Duration(seconds: 5),
      builder: (context) {
        return const Text('Simple custom story 2');
      },
    )
  ];

  final stories = [firstStoryContent, secondStoryContent];
  final storiesSliders = [
    const SimpleCustomSlideItem(
      width: 120,
      height: 120,
      text: 'Large large text',
    ),
    const ImageNetworkSlideItem(
      url: 'https://docs.flutter.dev/assets/images/dash/dash-fainting.gif',
      width: 120,
      height: 120,
    )
  ];

  return SafeArea(
    child: Column(
      children: [
        SizedBox(
          height: 120,
          child: EasyDevStory(
            storyCount: stories.length,
            storyBuilder: (storyIndex) => Story(
              contentCount: stories[storyIndex].length,
              contentBuilder: (contentIndex) => stories[storyIndex][contentIndex],
            ),
            sliderBuilder: (storyIndex) {
              return storiesSliders[storyIndex];
            },
          ),
        ),
      ],
    ),
  );
}

额外定制

EasyDevStoryStyle

使用EasyDevStoryStyle来定制故事小部件的外观。

EasyDevStory(
  ...
  style: const EasyDevStoryStyle(
    sliderStyle: SliderStyle(
      spacing: 10,
      padding: EdgeInsets.zero,
    ),
    indicatorStyle: IndicatorStyle(),
  ),
),

StoryFooter

你可以在故事内容中添加底部信息栏。有两个内置的底部信息栏:StoryFooter.largeStoryFooter.small。你也可以创建自定义的小部件并传递给EasyDevStory

EasyDevStory(
  ...
  footer: StoryFooter.large(
    mainButtonLabel: "Learn More",
    onMainButton: () => ...,
    onButtonLikeTap: (bool state) => ...,
    onButtonShareTap: () => ...,
    onButtonBookmarkTap: (bool state) => ...,
    likeInitState: ...,
    bookmarkInitState: ...,
  ),
),

EasyDevStoryController

你可以为故事添加控制器来管理它们。

...
final EasyDevStoryController controller = EasyDevStoryController();
...
EasyDevStory(
  ...
  controller: controller,
),

更多关于Flutter故事视图展示插件easydev_story_view的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter故事视图展示插件easydev_story_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


easydev_story_view 是一个用于在 Flutter 应用中展示故事视图的插件。它可以帮助你创建类似 Instagram 或 Snapchat 的故事视图,用户可以滑动浏览不同的故事。

安装

首先,你需要在 pubspec.yaml 文件中添加 easydev_story_view 依赖:

dependencies:
  flutter:
    sdk: flutter
  easydev_story_view: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本用法

以下是一个简单的示例,展示如何使用 easydev_story_view 来创建一个故事视图:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: StoryExample(),
    );
  }
}

class StoryExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Story View Example'),
      ),
      body: Center(
        child: EasyDevStoryView(
          stories: [
            EasyDevStory(
              imageUrl: 'https://via.placeholder.com/300',
              duration: Duration(seconds: 5),
            ),
            EasyDevStory(
              imageUrl: 'https://via.placeholder.com/400',
              duration: Duration(seconds: 7),
            ),
            EasyDevStory(
              imageUrl: 'https://via.placeholder.com/500',
              duration: Duration(seconds: 10),
            ),
          ],
          onComplete: () {
            print('All stories have been viewed');
          },
        ),
      ),
    );
  }
}

参数说明

  • stories: 一个 List<EasyDevStory>,包含所有要展示的故事。每个故事可以指定 imageUrl(图片 URL)和 duration(展示时长)。
  • onComplete: 当所有故事都播放完毕时触发的回调函数。

自定义

你还可以通过其他参数来进一步自定义故事视图,例如:

  • progressBarColor: 进度条的颜色。
  • progressBarHeight: 进度条的高度。
  • storyBackgroundColor: 故事视图的背景颜色。
  • onStoryChanged: 当切换到下一个故事时触发的回调函数。
EasyDevStoryView(
  stories: [
    EasyDevStory(
      imageUrl: 'https://via.placeholder.com/300',
      duration: Duration(seconds: 5),
    ),
    // 更多故事...
  ],
  onComplete: () {
    print('All stories have been viewed');
  },
  progressBarColor: Colors.blue,
  progressBarHeight: 4.0,
  storyBackgroundColor: Colors.black,
  onStoryChanged: (index) {
    print('Switched to story $index');
  },
);
回到顶部