Flutter画中画服务活动管理插件pip_services_activities的使用
#
Party Activities Microservice #
这是一个来自Pip.Services库的聚会活动日志微服务。它记录重要的聚会活动,如注册、登录、创建、更改或删除数据项等。
该微服务目前支持以下部署选项:
- 部署平台:独立进程、Seneca
- 外部API:HTTP/REST、Seneca
- 持久化:内存、扁平文件、MongoDB
该微服务不依赖于其他微服务。
- 下载链接
- 开发指南
- 配置指南
- 部署指南
- 客户端SDK
- 通信协议
- HTTP版本1
合同 #
微服务的逻辑合同如下。对于物理实现(HTTP/REST),请参阅特定协议的文档。
class PartyActivityV1 implements IStringIdentifiable {
/* 识别 */
String id;
String org_id;
/* 识别字段 */
DateTime time;
String type;
ReferenceV1 party;
/* 引用对象(笔记、目标等) */
ReferenceV1 ref_item;
List<ReferenceV1> ref_parents;
ReferenceV1 ref_party;
/* 其他细节,如进度百分比或新状态 */
StringValueMap details;
}
class ReferenceV1 implements IStringIdentifiable {
String id;
String type;
String name;
}
abstract class IActivitiesV1 {
Future<DataPage<PartyActivityV1>> getPartyActivities(
String correlationId, FilterParams filter, PagingParams paging);
Future<PartyActivityV1> logPartyActivity(String correlationId, PartyActivityV1 activity);
Future<List<PartyActivityV1>> batchPartyActivities(String correlationId, List<PartyActivityV1> activities);
Future deletePartyActivities(String correlationId, dynamic filter);
}
下载 #
目前唯一获取微服务的方法是从github仓库直接检出。
git clone git@github.com:pip-services-users/pip-services-activities-dart.git
Pip.Service团队正在努力实现打包,并使稳定版本可供您作为可下载的zip归档文件。
运行 #
在微服务文件夹的根目录下添加config.yaml文件并设置配置参数。
微服务配置示例
---
# 容器描述符
- descriptor: "pip-services:context-info:default:default:1.0"
name: "pip-services-activities"
description: "Pip服务的活动微服务"
控制台记录器
- descriptor: “pip-services:logger:console:default:1.0”
level: “trace”
性能计数器,将值发布到日志
- descriptor: “pip-services:counters:log:default:1.0”
level: “trace”
{{#MEMORY_ENABLED}}
内存持久化。仅用于测试!
- descriptor: “pip-services-activities:persistence:memory:default:1.0”
{{/MEMORY_ENABLED}}
{{#FILE_ENABLED}}
文件持久化。用于测试或简单的独立部署
- descriptor: “pip-services-activities:persistence:file:default:1.0”
path: {{FILE_PATH}}{{^FILE_PATH}}"./data/activities.json"{{/FILE_PATH}}
{{/FILE_ENABLED}}
{{#MONGO_ENABLED}}
MongoDB 持久化
- descriptor: “pip-services-activities:persistence:mongodb:default:1.0”
collection: {{MONGO_COLLECTION}}{{^MONGO_COLLECTION}}activities{{/MONGO_COLLECTION}}
connection:
uri: {{{MONGO_SERVICE_URI}}}
host: {{{MONGO_SERVICE_HOST}}}{{^MONGO_SERVICE_HOST}}localhost{{/MONGO_SERVICE_HOST}}
port: {{MONGO_SERVICE_PORT}}{{^MONGO_SERVICE_PORT}}27017{{/MONGO_SERVICE_PORT}}
database: {{MONGO_DB}}{{#^MONGO_DB}}app{{/^MONGO_DB}}
credential:
username: {{MONGO_USER}}
password: {{MONGO_PASS}}
{{/MONGO_ENABLED}}
{{^MEMORY_ENABLED}}{{^FILE_ENABLED}}{{^MONGO_ENABLED}}
默认内存储存
- descriptor: “pip-services-activities:persistence:memory:default:1.0”
{{/MONGO_ENABLED}}{{/FILE_ENABLED}}{{/MEMORY_ENABLED}}
默认控制器
- descriptor: “pip-services-activities:controller:default:default:1.0”
公共HTTP端点
- descriptor: “pip-services:endpoint:http:default:1.0”
connection:
protocol: “http”
host: “0.0.0.0”
port: 8080
HTTP端点版本1.0
- descriptor: “pip-services-activities:service:http:default:1.0”
心跳服务
- descriptor: “pip-services:heartbeat-service:http:default:1.0”
状态服务
- descriptor: “pip-services:status-service:http:default:1.0”
有关微服务配置的更多信息,请参见配置指南。
使用命令启动微服务:
dart ./bin/run.dart
使用 #
与微服务最简单的方法是使用客户端SDK。 可用客户端SDK的完整列表见快速链接。
如果您使用的是Dart,则获取所需库的引用:
添加pip-services3-commons-dart、pip-services3-rpc-dart 和pip_services_activities 包
import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';
import ‘package:pip_services_activities/pip_services_activities.dart’;
定义匹配微服务外部API配置的客户端配置参数
// 客户端配置
var httpConfig = ConfigParams.fromTuples(
"connection.protocol", "http",
"connection.host", "localhost",
"connection.port", 8080
);
实例化客户端并打开连接到微服务
// 创建客户端实例
var client = ActivitiesHttpClientV1(config);
// 配置客户端
client.configure(httpConfig);
// 连接到微服务
try{
await client.open(null);
}catch(e) {
// 错误处理…
}
// 与微服务交互
// …
现在客户端已准备好执行操作
// 创建一个新的活动
final ACTIVITY = PartyActivityV1({
type: 'signup',
party: {
id: '123',
name: 'Test User'
}
});
// 创建活动
try {
var activity = await client.logPartyActivity('123', ACTIVITY);
// 对返回的活动进行操作...
} catch(e) {
// 错误处理...
}
// 获取'123'用户ID的活动列表
var now = new DateTime.now();
try {
var page = await client.getPartyActivities(
null,
{
party_id: '123',
from_time: new DateTime(now.millisecondsSinceEpoch - 24 * 3600 * 1000),
to_time: now
},
{
total: true,
skip: 0,
take: 10
});
// 对页面进行操作...
} catch(e) { // 错误处理}
致谢 #
该微服务由
- Sergey Seroukhov创建并维护。
- Nuzhnykh Egor
更多关于Flutter画中画服务活动管理插件pip_services_activities的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter画中画服务活动管理插件pip_services_activities的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
pip_services_activities
是一个用于管理 Flutter 应用中画中画(Picture-in-Picture, PiP)服务活动的插件。它提供了简单的 API 来控制 PiP 模式,使得开发者可以轻松地在应用中集成画中画功能。
安装
首先,你需要在 pubspec.yaml
文件中添加 pip_services_activities
插件的依赖:
dependencies:
flutter:
sdk: flutter
pip_services_activities: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
基本用法
-
初始化插件
在你的应用启动时,初始化
pip_services_activities
插件:import 'package:pip_services_activities/pip_services_activities.dart'; void main() { PipServicesActivities.initialize(); runApp(MyApp()); }
-
进入画中画模式
你可以在需要的时候调用
enterPictureInPictureMode
方法来进入画中画模式:import 'package:pip_services_activities/pip_services_activities.dart'; void enterPipMode() async { bool success = await PipServicesActivities.enterPictureInPictureMode(); if (success) { print("Successfully entered PiP mode"); } else { print("Failed to enter PiP mode"); } }
-
退出画中画模式
你可以调用
exitPictureInPictureMode
方法来退出画中画模式:import 'package:pip_services_activities/pip_services_activities.dart'; void exitPipMode() async { bool success = await PipServicesActivities.exitPictureInPictureMode(); if (success) { print("Successfully exited PiP mode"); } else { print("Failed to exit PiP mode"); } }
-
监听画中画模式变化
你可以监听画中画模式的变化,以便在模式改变时执行相应的操作:
import 'package:pip_services_activities/pip_services_activities.dart'; void listenToPipChanges() { PipServicesActivities.onPictureInPictureModeChanged.listen((isInPipMode) { if (isInPipMode) { print("App is in PiP mode"); } else { print("App is not in PiP mode"); } }); }
示例
以下是一个完整的示例,展示了如何在 Flutter 应用中使用 pip_services_activities
插件:
import 'package:flutter/material.dart';
import 'package:pip_services_activities/pip_services_activities.dart';
void main() {
PipServicesActivities.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: PipExample(),
);
}
}
class PipExample extends StatefulWidget {
@override
_PipExampleState createState() => _PipExampleState();
}
class _PipExampleState extends State<PipExample> {
@override
void initState() {
super.initState();
PipServicesActivities.onPictureInPictureModeChanged.listen((isInPipMode) {
print(isInPipMode ? "Entered PiP mode" : "Exited PiP mode");
});
}
void enterPipMode() async {
bool success = await PipServicesActivities.enterPictureInPictureMode();
if (success) {
print("Successfully entered PiP mode");
} else {
print("Failed to enter PiP mode");
}
}
void exitPipMode() async {
bool success = await PipServicesActivities.exitPictureInPictureMode();
if (success) {
print("Successfully exited PiP mode");
} else {
print("Failed to exit PiP mode");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("PiP Example"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: enterPipMode,
child: Text("Enter PiP Mode"),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: exitPipMode,
child: Text("Exit PiP Mode"),
),
],
),
),
);
}
}
注意事项
-
兼容性:画中画功能在 Android 8.0(API 级别 26)及以上版本中可用。确保你的应用目标 SDK 版本为 26 或更高。
-
权限:确保在
AndroidManifest.xml
文件中声明了画中画权限:<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT"/>