插件介绍

iOS App Clip Flutter 插件是一个演示项目,展示了如何将 Flutter 与轻量级应用入口概念集成。虽然 App Clip 是 iOS 14+ 的特定功能,但该插件的设计理念可以应用于鸿蒙系统,实现类似的轻量级应用体验。

该插件的核心特点包括:

  • 演示如何创建轻量级应用入口
  • 使用 Flutter 渲染完整的用户界面
  • 集成设备信息获取功能
  • 展示与原生平台的交互能力

在鸿蒙系统上,我们可以借鉴此插件的设计思路,实现类似的"轻应用"体验,通过鸿蒙的原子化服务或快速应用功能,为用户提供无需完整安装即可使用的应用功能。

使用步骤

1. 包的引入

由于此三方库为自定义修改版本,需要通过 Git 形式引入。在您的 Flutter 项目的 pubspec.yaml 文件中添加以下依赖配置:

dependencies:
  ios_app_clip:
    git:
      url: "https://atomgit.com/"
      path: "packages/ios_app_clip/ios_app_clip"
  device_info: ^2.0.3

2. 基本使用

初始化应用

创建一个基本的 Flutter 应用入口:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:device_info/device_info.dart';

void main() {
  runApp(const Demo());
}
实现轻量级应用界面
class Demo extends StatefulWidget {
  const Demo({super.key});

  
  State<Demo> createState() => _DemoState();
}

class _DemoState extends State<Demo> {
  String deviceInfo = '';

  
  void initState() {
    // 获取设备信息
    DeviceInfoPlugin().iosInfo.then((info) {
      setState(() {
        deviceInfo = '${info.name} on ${info.systemName} version '
            '${info.systemVersion}';
      });
    });
    super.initState();
  }

  
  Widget build(BuildContext context) {
    return CupertinoApp(
      home: CupertinoPageScaffold(
        navigationBar: const CupertinoNavigationBar(
          middle: Text('轻应用入口'),
        ),
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(deviceInfo),
              const Padding(padding: EdgeInsets.only(top: 18)),
              const FlutterLogo(size: 128),
            ],
          ),
        ),
      ),
    );
  }
}

3. 鸿蒙系统适配

设备信息获取适配

在鸿蒙系统上,我们需要使用鸿蒙特定的 API 来获取设备信息。以下是适配后的代码示例:

class _DemoState extends State<Demo> {
  String deviceInfo = '';

  
  void initState() {
    _getDeviceInfo();
    super.initState();
  }

  Future<void> _getDeviceInfo() async {
    DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();

    try {
      // 尝试获取 iOS 设备信息
      IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
      setState(() {
        deviceInfo = '${iosInfo.name} on ${iosInfo.systemName} version '
            '${iosInfo.systemVersion}';
      });
    } catch (e) {
      try {
        // 尝试获取 Android 设备信息(鸿蒙兼容 Android 模式)
        AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
        setState(() {
          deviceInfo = '${androidInfo.brand} ${androidInfo.model} on '
              'Android version ${androidInfo.version.release}';
        });
      } catch (e) {
        // 兜底方案
        setState(() {
          deviceInfo = 'Device info not available';
        });
      }
    }
  }

  // 其余代码不变...
}
鸿蒙轻应用配置

在鸿蒙系统上实现类似 App Clip 的功能,需要进行以下配置:

  1. config.json 文件中添加原子化服务配置:
{
  "app": {
    "bundleName": "com.example.appclip",
    "vendor": "example",
    "version": {
      "code": 1000000,
      "name": "1.0.0"
    },
    "apiVersion": {
      "compatible": 9,
      "target": 9
    }
  },
  "deviceConfig": {},
  "module": {
    "package": "com.example.appclip",
    "name": ".AppClip",
    "mainAbility": "com.example.appclip.MainAbility",
    "deviceTypes": ["phone"],
    "distro": {
      "deliveryWithInstall": false,
      "moduleName": "appclip",
      "moduleType": "feature"
    },
    "abilities": [
      {
        "skills": [
          {
            "entities": ["entity.system.home"],
            "actions": ["action.system.home"]
          }
        ],
        "orientation": "unspecified",
        "name": "com.example.appclip.MainAbility",
        "icon": "$media:icon",
        "description": "轻应用入口示例",
        "label": "App Clip Demo",
        "type": "page",
        "launchType": "standard"
      }
    ]
  }
}
  1. 配置 Flutter 模块以支持鸿蒙原子化服务:
# 在 Flutter 模块的 pubspec.yaml 中添加
flutter:
  plugin:
    platforms:
      android:
        package: com.example.appclip
        pluginClass: AppClipPlugin
      ios:
        pluginClass: AppClipPlugin

总结

iOS App Clip Flutter 插件为我们提供了一个实现轻量级应用入口的参考示例。虽然 App Clip 是 iOS 特定功能,但我们可以借鉴其设计理念,在鸿蒙系统上通过原子化服务或快速应用功能实现类似的体验。

使用此插件时,需要注意以下几点:

  1. 通过 Git 形式引入自定义修改版本的插件
  2. 适配鸿蒙系统的设备信息获取 API
  3. 配置鸿蒙原子化服务以实现轻量级应用入口
  4. 考虑鸿蒙系统的特定限制和最佳实践

这个示例项目展示了 Flutter 的跨平台能力,以及如何将特定平台的功能理念适配到其他平台。通过合理的设计和适配,我们可以在鸿蒙系统上提供与 App Clip 类似的用户体验。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐