当前位置: 首页 > news >正文

鸿蒙harmonyos next flutter混合开发之开发plugin(获取操作系统版本号)

  • 创建Plugin为my_plugin
flutter create --org com.example --template=plugin --platforms=android,ios,ohos my_plugin
  • 创建Application为my_application
flutter create --org com.example my_application
  • flutter_application引用flutter_plugin,在pubspec.yaml文件中dependencies中添加flutter_plugin引用
  my_plugin:path: /Users/administrator/Desktop/workspace/my_plugin
  • 代码编写调用

my_plugin ohos代码编写:

import {FlutterPlugin,FlutterPluginBinding,MethodCall,MethodCallHandler,MethodChannel,MethodResult,
} from '@ohos/flutter_ohos';
import deviceInfo from '@ohos.deviceInfo'/** MyPlugin **/
export default class MyPlugin implements FlutterPlugin, MethodCallHandler {private channel: MethodChannel | null = null;constructor() {}getUniqueClassName(): string {return "MyPlugin"}onAttachedToEngine(binding: FlutterPluginBinding): void {this.channel = new MethodChannel(binding.getBinaryMessenger(), "my_plugin");this.channel.setMethodCallHandler(this)}onDetachedFromEngine(binding: FlutterPluginBinding): void {if (this.channel != null) {this.channel.setMethodCallHandler(null)}}onMethodCall(call: MethodCall, result: MethodResult): void {if (call.method == "getPlatformVersion") {result.success(deviceInfo.osFullName);} else {result.notImplemented()}}
}

my_plugin dart代码编写:


import 'my_plugin_platform_interface.dart';class MyPlugin {Future<String?> getPlatformVersion() {return MyPluginPlatform.instance.getPlatformVersion();}
}
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';import 'my_plugin_platform_interface.dart';/// An implementation of [MyPluginPlatform] that uses method channels.
class MethodChannelMyPlugin extends MyPluginPlatform {/// The method channel used to interact with the native platform.@visibleForTestingfinal methodChannel = const MethodChannel('my_plugin');@overrideFuture<String?> getPlatformVersion() async {final version = await methodChannel.invokeMethod<String>('getPlatformVersion');return version;}
}
import 'package:plugin_platform_interface/plugin_platform_interface.dart';import 'my_plugin_method_channel.dart';abstract class MyPluginPlatform extends PlatformInterface {/// Constructs a MyPluginPlatform.MyPluginPlatform() : super(token: _token);static final Object _token = Object();static MyPluginPlatform _instance = MethodChannelMyPlugin();/// The default instance of [MyPluginPlatform] to use.////// Defaults to [MethodChannelMyPlugin].static MyPluginPlatform get instance => _instance;/// Platform-specific implementations should set this with their own/// platform-specific class that extends [MyPluginPlatform] when/// they register themselves.static set instance(MyPluginPlatform instance) {PlatformInterface.verifyToken(instance, _token);_instance = instance;}Future<String?> getPlatformVersion() {throw UnimplementedError('platformVersion() has not been implemented.');}
}

my_application dart代码调用:

import 'package:flutter/material.dart';
import 'package:my_plugin/my_plugin.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({super.key});@overrideWidget build(BuildContext context) {return MaterialApp(title: 'Flutter Demo',theme: ThemeData(primarySwatch: Colors.blue,),home: const MyHomePage(title: 'my_application调用my_plugin'),);}
}class MyHomePage extends StatefulWidget {const MyHomePage({super.key, required this.title});final String title;@overrideState<MyHomePage> createState() => _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> {MyPlugin myPlugin = MyPlugin();String PlatformVersion = "";@overridevoid initState() {// TODO: implement initStatesuper.initState();myPlugin.getPlatformVersion().then((value){PlatformVersion = value ?? "";setState(() {});});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text(widget.title),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[Text('当前平台版本号为:$PlatformVersion',style: Theme.of(context).textTheme.headlineMedium,textAlign: TextAlign.center,),],),),);}
}
  • 效果展示

http://www.lryc.cn/news/457471.html

相关文章:

  • 介绍一款开源的 Modern GUI PySide6 / PyQt6的使用
  • 【大模型】AI数据基础设施的对象存储
  • 【前端工程解耦】使用事件中心实现系统解耦,注册,触发,删除事件
  • 计算机网络803-(4)网络层
  • java速成指南
  • 【Unity】双摄像机叠加渲染
  • web网页项目--用户登录,注册页面代码
  • 国外火出圈儿的PM御用AI编程工具Bolt.new效果干不过国产的CodeFlying?号称全新定义全栈开发流程?
  • 爸妈总说着学门技术,学机器视觉技术确实是一条踏实的生活道路,这条路你走得下去走得通吗?
  • 2024互联网下载神器IDM6.42你值得拥有
  • 基于H3C环境的实验——OSPF
  • java线程池详解
  • 五、创建型(建造者模式)
  • CPU超线程技术是什么,怎么启用超线程技术
  • vba学习系列(7)--考勤表制作
  • Java学习第九天
  • 【算法系列-链表】链表相交 环形链表II
  • 使用 Go 和 Gin 框架构建简单的用户和物品管理 Web 服务
  • 【VUE】双端比较算法
  • 跨界的胜利:机器学习与神经网络的物理之光
  • 容器化技术:Docker的基本概念和使用
  • EcoVadis认证内容有哪些?EcoVadis认证申请流程?
  • Windows 搭建 Gitea
  • 嵌入式面试——FreeRTOS篇(五) 事件标志组
  • 智能听诊器:宠物健康管理的革命
  • dfs +剪枝sudoku———poj2676
  • 机器学习:关联规则:Apriori算法、FP - Growth算法的原理、应用场景及优缺点介绍
  • 从0开始深度学习(7)——线性回归的简洁实现
  • 【网络安全 | Java代码审计】华夏ERP(jshERP)v2.3
  • Setting the value of ‘*‘ exceeded the quota