Flutter故事展示插件flutter_stories的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter故事展示插件flutter_stories的使用

example

flutter_stories 是一个为你的应用带来类似Instagram或Snapchat故事机制的Flutter插件。

优势

  • 简单易用且直观的API
  • 轻量级(约200行代码)
  • 如果你使用过Instagram或Snapchat的故事功能,会感觉很熟悉
  • 可以独立与Cupertino和Material包一起使用

使用方法

首先,在 pubspec.yaml 文件中添加 flutter_stories 依赖:

dependencies:
  flutter_stories: ^<最新版本号>

然后运行 flutter pub get 来安装插件。

示例

完整的示例可以查看 GitHub仓库中的示例目录

showcase

支持的手势

  • 点击屏幕右侧部分切换到下一个时刻。你可以指定 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

1 回复

更多关于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 插件。

回到顶部