Flutter故事视图展示插件easydev_story_view的使用
Flutter故事视图展示插件easydev_story_view的使用
easydev_story_view
这是一个用于在应用程序中展示故事的Flutter小部件,采用easydev ui套件。它提供了暂停、切换和关闭故事的手势动画,并且可以自定义故事。
屏幕截图
这个Flutter小部件用于在应用中展示故事,并采用easydev ui套件。它支持手势来暂停、前进、回到上一页,并且能够自定义故事。
特性
- 支持通过手势暂停、切换故事并带有拖动动画来关闭。
- 内置对图片和视频的支持,还可以创建自定义的故事。
- 带有动画进度指示器。
- 内置底部信息栏,也可以创建自定义底部信息栏。
- 控制器用于管理故事。
安装
要使用这个包,在pubspec.yaml
文件中添加easydev_story_view
和easydev_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
包)、Theme
或CupertinoTheme
,或者使用自动提供主题的小部件,例如EasyDevApp
(来自easydev_basics
包)、MaterialApp
或CupertinoApp
。
基础用法
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.large
和 StoryFooter.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
更多关于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');
},
);