Flutter应用内故事展示插件inappstory_plugin的使用
Flutter应用内故事展示插件inappstory_plugin的使用
安装
当前该插件还在开发中,并未发布。
在你的 pubspec.yaml
文件中添加依赖:
dependencies:
...
inappstory_plugin: ^0.0.6
...
Android需求
确保更新你的 Android SDK 版本:
minSdkVersion = 23
compileSdkVersion = 34
targetSdkVersion = 34
初始化
使用你的 API 密钥初始化插件:
InappstoryPlugin().initWith('<your api key>', '<user id>', false);
使用
要使用该库,创建一个 YourStoryWidget
并实现 StoryWidget
接口:
class YourStoryWidget extends StatelessWidget implements StoryWidget {
const YourStoryWidget(this.story, {super.key});
...
}
获取特定 feed 的故事组件:
InAppStoryPlugin().getStoriesWidgets(
feed: '<your feed>',
storyBuilder: <function returns Widget for Story>,
);
获取特定 feed 的故事组件并包含收藏项:
InAppStoryPlugin().getStoriesWidgets(
feed: '<your feed>',
storyBuilder: <function returns Widget for Story>,
favoritesBuilder: <function returns Widget for in feed Favorites>,
);
完整示例
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final initialization = InappstoryPlugin().initWith('<your api key>', '<user id>', false);
final flutterFeedStoriesWidgetsStream = InAppStoryPlugin().getStoriesWidgets(
feed: 'flutter',
storyBuilder: StoryWidgetSimpleDecorator.new,
favoritesBuilder: GridFeedFavoritesWidget.new, // 可以为null
);
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Column(
children: [
SizedBox(
height: 150,
child: StreamBuilder(
stream: flutterFeedStoriesWidgetsStream,
builder: (_, snapshot) {
if (snapshot.hasError) return Text('${snapshot.error}');
if (snapshot.hasData) {
return ListView.separated(
scrollDirection: Axis.horizontal,
itemBuilder: (_, index) => snapshot.requireData.elementAt(index),
separatorBuilder: (_, __) => const SizedBox(width: 12),
itemCount: snapshot.requireData.length,
);
}
return const LinearProgressIndicator();
},
),
),
],
),
);
}
}
class StoryWidgetSimpleDecorator extends StatelessWidget implements StoryWidget {
const StoryWidgetSimpleDecorator(this.story, {super.key});
[@override](/user/override)
final Story story;
Image? get imageNullable {
final imageFile = story.imageFile;
if (imageFile == null) return null;
return Image.file(imageFile);
}
[@override](/user/override)
Widget build(BuildContext context) {
return StreamBuilder(
stream: story.updates,
builder: (_, __) {
return ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(10)),
child: AspectRatio(
aspectRatio: story.aspectRatio,
child: GestureDetector(
onTap: story.tap,
child: Stack(
children: [
Positioned.fill(
child: imageNullable ?? ColoredBox(color: story.backgroundColor),
),
const Positioned.fill(
child: DecoratedBox(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Colors.transparent,
Colors.black87,
],
),
),
),
),
Align(
alignment: Alignment.bottomLeft,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
story.title,
style: TextStyle(color: story.titleColor),
),
),
),
],
),
),
),
);
},
);
}
}
获取收藏的故事
final favorites = InAppStoryPlugin().getFavoritesStoriesWidgets(
feed: 'flutter',
storyBuilder: StoryWidgetSimpleDecorator.new,
).asBroadcastStream();
外观管理器
故事阅读器外观
显示/隐藏按钮:
- 点赞/不喜欢
- 收藏
- 分享
AppearanceManagerHostApi().setHasLike(true);
AppearanceManagerHostApi().setHasFavorites(true);
AppearanceManagerHostApi().setHasShare(true);
故事阅读器关闭按钮位置
位置选项:
- topLeft
- topRight
- bottomLeft
- bottomRight
AppearanceManagerHostApi().setClosePosition(position)
故事阅读器计时器渐变
启用/禁用状态:
AppearanceManagerHostApi().setTimerGradientEnable(true)
获取状态:
final Future<bool> timerGradientEnabledFuture= AppearanceManagerHostApi().getTimerGradientEnable();
设置渐变颜色和位置:
const gradient = LinearGradient(colors: [Colors.purple, Colors.amber], stops: [0.1, 0.3]);
AppearanceManagerHostApi().setTimerGradient(
colors: gradient.colors.map((it) => it.value).toList(),
locations: gradient.stops ?? [],
);
故事阅读器背景
AppearanceManagerHostApi().setReaderBackgroundColor(Colors.green.value)
故事阅读器圆角半径
AppearanceManagerHostApi().setReaderCornerRadius(16); // int
单个故事API
通过 ID 显示单个故事:
IASSingleStoryHostApi().show(storyId: story.id, slide: 1);
如果用户还没有看过,则显示单个故事:
IASSingleStoryHostApi().showOnce(storyId: story.id);
监听回调结果:
class _WidgetState extends State<...> implements IShowStoryOnceCallbackFlutterApi {
[@override](/user/override)
void initState() {
super.initState();
IShowStoryOnceCallbackFlutterApi.setUp(this);
}
[@override](/user/override)
void dispose() {
IShowStoryOnceCallbackFlutterApi.setUp(null);
super.dispose();
}
[@override](/user/override)
void alreadyShown() => print('IShowStoryOnceCallback.alreadyShown()');
[@override](/user/override)
void onError() => print('IShowStoryOnceCallback.onError()');
[@override](/user/override)
void onShow() => print('IShowStoryOnceCallback.onShow()');
}
呼吁行动
添加/移除呼吁行动监听器:
- 实现
CallToActionCallbackFlutterApi
接口。 - 设置此监听器:
class _SimpleFeedExampleState extends State<SimpleFeedExampleWidget> implements CallToActionCallbackFlutterApi {
[@override](/user/override)
void initState() {
super.initState();
CallToActionCallbackFlutterApi.setUp(this); // 添加监听器
}
[@override](/user/override)
void dispose() {
CallToActionCallbackFlutterApi.setUp(null); // 移除监听器
super.dispose();
}
final callsToAction = <String>[];
[@override](/user/override)
void callToAction(SlideDataDto? slideData, String? url, ClickActionDto? clickAction) {
// 执行相关操作
}
}
更多关于Flutter应用内故事展示插件inappstory_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用内故事展示插件inappstory_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中集成和使用inappstory_plugin
插件的代码示例。这个插件假设是用于在应用内展示故事或广告内容的自定义插件。请注意,实际插件的API和配置可能有所不同,因此以下代码是基于一个假设的插件接口编写的。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加inappstory_plugin
依赖项(假设该插件已经在pub.dev上发布):
dependencies:
flutter:
sdk: flutter
inappstory_plugin: ^x.y.z # 使用实际的版本号替换x.y.z
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中导入插件:
import 'package:inappstory_plugin/inappstory_plugin.dart';
3. 初始化插件
在你的应用的主入口文件(通常是main.dart
)中初始化插件:
void main() {
WidgetsFlutterBinding.ensureInitialized();
InAppStoryPlugin.instance.initialize(); // 假设插件有一个初始化方法
runApp(MyApp());
}
4. 展示故事
在你的应用中,当需要展示故事时,可以调用插件提供的方法。以下是一个简单的示例,展示如何在按钮点击时显示故事:
import 'package:flutter/material.dart';
import 'package:inappstory_plugin/inappstory_plugin.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
InAppStoryPlugin.instance.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('In-App Story Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
_showStory();
},
child: Text('Show Story'),
),
),
),
);
}
void _showStory() async {
try {
// 假设插件有一个showStory方法,接受一个配置对象
var storyConfig = StoryConfig(
storyId: '12345', // 故事的唯一标识符
placement: 'home_screen', // 故事的展示位置
);
await InAppStoryPlugin.instance.showStory(storyConfig);
} catch (e) {
// 处理错误
print('Failed to show story: $e');
}
}
}
// 假设的配置类
class StoryConfig {
final String storyId;
final String placement;
StoryConfig({required this.storyId, required this.placement});
}
5. 处理回调(可选)
支持void回调 _(setup例如Story,Callbacks当用户()完成 {故事
时 ),In你可以App通过Story注册Plugin回调.来处理instance这些.事件on:StoryCompleted = (storyId) {
// 处理故事完成事件
print('Story $storyId completed');
};
InAppStoryPlugin.instance.onStoryClicked = (storyId) {
// 处理故事点击事件
print('Story $storyId clicked');
};
// 其他可能的回调...
}
你可以在main
函数或你的应用的初始化部分调用_setupStoryCallbacks()
来设置这些回调。
注意
- 上述代码是一个假设的示例,实际的
inappstory_plugin
插件可能有不同的API和配置要求。 - 请查阅插件的官方文档以获取最新的API信息和配置选项。
- 确保插件已正确安装并导入到你的Flutter项目中。
希望这能帮助你在Flutter应用中集成和使用inappstory_plugin
插件!