Flutter画中画服务活动管理插件pip_services_activities的使用

Pip.Services Logo #

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-dartpip-services3-rpc-dartpip_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

1 回复

更多关于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 来安装依赖。

基本用法

  1. 初始化插件

    在你的应用启动时,初始化 pip_services_activities 插件:

    import 'package:pip_services_activities/pip_services_activities.dart';
    
    void main() {
      PipServicesActivities.initialize();
      runApp(MyApp());
    }
    
  2. 进入画中画模式

    你可以在需要的时候调用 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");
      }
    }
    
  3. 退出画中画模式

    你可以调用 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");
      }
    }
    
  4. 监听画中画模式变化

    你可以监听画中画模式的变化,以便在模式改变时执行相应的操作:

    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"/>
回到顶部