Flutter故事展示插件flutter_stories的使用
Flutter故事展示插件flutter_stories的使用
flutter_stories
是一个为你的应用带来类似Instagram或Snapchat故事机制的Flutter插件。
优势
- 简单易用且直观的API
- 轻量级(约200行代码)
- 如果你使用过Instagram或Snapchat的故事功能,会感觉很熟悉
- 可以独立与Cupertino和Material包一起使用
使用方法
首先,在 pubspec.yaml
文件中添加 flutter_stories
依赖:
dependencies:
flutter_stories: ^<最新版本号>
然后运行 flutter pub get
来安装插件。
示例
完整的示例可以查看 GitHub仓库中的示例目录。
支持的手势
- 点击屏幕右侧部分切换到下一个时刻。你可以指定
onFlashForward
回调来控制应用程序在这种情况下或故事结束时的行为。 - 点击屏幕左侧部分切换到上一个时刻。类似于右侧点击,但使用
onFlashBack
。 - 长按屏幕隐藏进度段并暂停故事,释放显示控件并继续播放。
API
属性 | 类型 | 是否必须 | 描述 |
---|---|---|---|
momentCount |
int |
是 | 设置故事中的时刻数量 |
momentDurationGetter |
(int index) => Duration |
是 | 返回每个时刻的持续时间的函数 |
momentBuilder |
(BuildContext context, int index) => Widget |
是 | 每个时刻执行的构建器 |
onFlashForward |
() => void |
否 | 当用户在最后一个时刻点击屏幕右侧部分或故事播放结束时执行 |
onFlashBack |
() => void |
否 | 当用户在第一个时刻点击屏幕左侧部分时执行 |
startAt |
int |
否 | 默认值为 0 。设置将显示的第一个时刻的索引 |
momentSwitcherFraction |
double |
否 | 默认值为 0.33 。设置左右可点击部分的比例:左侧用于返回,右侧用于前进 |
progressSegmentBuilder |
(BuildContext context, double progress, double gap) => Widget |
否 | 默认为 Story.instagramProgressSegmentBuilder - Instagram风格的极简段构建器。每个进度段的构建器 |
progressSegmentGap |
double |
否 | 默认值为 2.0 。设置每个进度段之间的间隙 |
progressOpacityDuration |
Duration |
否 | 默认值为 Duration(milliseconds: 300) 。设置进度条显示/隐藏动画的持续时间 |
topOffset |
double |
否 | 默认值为 MediaQuery.of(context).padding.top 。设置进度容器的顶部偏移 |
fullscreen |
bool |
否 | 默认值为 true 。如果为真,则通过SystemChrome服务隐藏状态栏 |
完整示例代码
以下是一个完整的示例,展示了如何使用 flutter_stories
插件:
import 'package:flutter/cupertino.dart';
import 'package:flutter_stories/flutter_stories.dart';
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return CupertinoApp(
debugShowCheckedModeBanner: false,
home: Home(),
);
}
}
class Home extends StatelessWidget {
final _momentCount = 5;
final _momentDuration = const Duration(seconds: 5);
@override
Widget build(BuildContext context) {
final images = List.generate(
_momentCount,
(idx) => Image.asset('assets/${idx + 1}.jpg'),
);
return CupertinoPageScaffold(
child: Center(
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(32.0),
border: Border.all(
color: CupertinoColors.activeOrange,
width: 2.0,
style: BorderStyle.solid,
),
),
width: 64.0,
height: 64.0,
padding: const EdgeInsets.all(2.0),
child: GestureDetector(
onTap: () {
showCupertinoDialog(
context: context,
builder: (context) {
return CupertinoPageScaffold(
child: Story(
onFlashForward: Navigator.of(context).pop,
onFlashBack: Navigator.of(context).pop,
momentCount: 5,
momentDurationGetter: (idx) => _momentDuration,
momentBuilder: (context, idx) => images[idx],
),
);
},
);
},
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(28.0),
color: CupertinoColors.activeBlue,
),
),
),
),
),
);
}
}
确保在你的项目中包含相应的图片资源,并根据需要调整路径和参数。
更多关于Flutter故事展示插件flutter_stories的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter故事展示插件flutter_stories的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 flutter_stories
插件在 Flutter 应用中展示故事的示例代码。这个插件通常用于展示类似于 Instagram 和 Snapchat 的故事功能。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_stories
依赖:
dependencies:
flutter:
sdk: flutter
flutter_stories: ^最新版本号 # 请替换为最新的版本号
然后运行 flutter pub get
来获取依赖。
接下来是一个简单的示例代码,展示如何使用 flutter_stories
插件:
import 'package:flutter/material.dart';
import 'package:flutter_stories/flutter_stories.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Stories Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: StoriesScreen(),
);
}
}
class StoriesScreen extends StatefulWidget {
@override
_StoriesScreenState createState() => _StoriesScreenState();
}
class _StoriesScreenState extends State<StoriesScreen> {
List<String> storyImages = [
'assets/story1.jpg',
'assets/story2.jpg',
'assets/story3.jpg',
// 添加更多图片路径
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Stories'),
),
body: Center(
child: FlutterStories(
// 设置故事的图片列表
imageUrls: storyImages,
// 设置故事查看者的用户ID(可选,用于个性化功能)
viewerId: 'viewer_123',
// 设置每个故事的显示时间(秒)
storyDuration: 5,
// 设置故事之间的切换动画时间(秒)
storyAnimationDuration: 0.5,
// 设置是否显示用户头像(可选)
showProfilePic: true,
// 设置用户头像图片(可选)
profilePicUrl: 'assets/profile_pic.png',
// 设置用户名称(可选)
userName: 'John Doe',
// 设置故事背景颜色
backgroundColor: Colors.black,
// 设置是否允许用户滑动到下一个故事
allowSwipeToNext: true,
// 设置是否显示底部进度条
showBottomProgressBar: true,
// 设置故事看完后的回调
onLastStoryCompleted: () {
// 可以在这里处理用户看完所有故事后的逻辑
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('所有故事已看完!')),
);
},
// 设置点击头像的回调
onProfilePicClicked: () {
// 可以在这里处理点击头像的逻辑
Navigator.pushNamed(context, '/profile'); // 假设有一个名为 /profile 的路由
},
),
),
);
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,包含一个 StoriesScreen
,它使用 FlutterStories
小部件来展示一系列图片作为故事。你可以根据需求调整 imageUrls
列表中的图片路径,以及其他可选参数。
请注意,这个示例假设你的图片资源已经放在 assets
文件夹中,并且你已经在 pubspec.yaml
文件中声明了这些资源。例如:
flutter:
assets:
- assets/story1.jpg
- assets/story2.jpg
- assets/story3.jpg
- assets/profile_pic.png
确保你根据项目的实际结构进行调整。希望这个示例能帮助你理解如何在 Flutter 应用中使用 flutter_stories
插件。