Flutter HarmonyOS Plugin Development Tutorial (Part 1)

I. Registering Your Plugin in the OHOS Project

1. EntryAbility Code

Integrate the Flutter engine and register the plugin:

export default class EntryAbility extends FlutterAbility {
@override
configureFlutterEngine(flutterEn…


This content originally appeared on DEV Community and was authored by flfljh

I. Registering Your Plugin in the OHOS Project

1. EntryAbility Code

Integrate the Flutter engine and register the plugin:

export default class EntryAbility extends FlutterAbility {
  @override
  configureFlutterEngine(flutterEngine: FlutterEngine) {
    super.configureFlutterEngine(flutterEngine);
    flutterEngine.getPlugins()?.add(new ExamOhosUtilsPlugin());
  }
}

2. Plugin Implementation Class

import { wxopensdk } from '@ohos.wxopensdk'; // Example dependency
import {
  FlutterPlugin,
  FlutterPluginBinding,
  MethodCall,
  MethodCallHandler,
  MethodChannel,
  MethodResult,
} from '@ohos/flutter_ohos';
import { common } from '@ohos.app.ability';

/** Custom Plugin for OHOS-Flutter Integration */
export default class ExamOhosUtilsPlugin implements FlutterPlugin, MethodCallHandler {
  private channel: MethodChannel | null = null;
  private WXApi: wxopensdk.WXApi | null = null;
  private context: common.UIAbilityContext | null = null;

  constructor() {}

  getUniqueClassName(): string {
    return "ExamOhosUtilsPlugin";
  }

  onAttachedToEngine(binding: FlutterPluginBinding): void {
    this.context = binding.getApplicationContext() as common.UIAbilityContext;
    this.channel = new MethodChannel(binding.getBinaryMessenger(), "exam_ohos_utils");
    this.channel.setMethodCallHandler(this);
  }

  onDetachedFromEngine(binding: FlutterPluginBinding): void {
    if (this.channel) {
      this.channel.setMethodCallHandler(null);
    }
  }

  async onMethodCall(call: MethodCall, result: MethodResult): Promise<void> {
    console.log("onMethodCall ==> ", call.method);
    if (call.method === "getPlatformVersion") {
      result.success("HarmonyOS ^ ^");
    } else {
      result.notImplemented();
    }
  }
}

3. Flutter Client Code

a. Define the Plugin Interface

// Abstract class for platform-specific implementations
abstract class ExamOhosUtilsPlatform extends PlatformInterface {
  ExamOhosUtilsPlatform() : super(token: _token);

  static final Object _token = Object();

  static ExamOhosUtilsPlatform _instance = MethodChannelExamOhosUtils();

  static ExamOhosUtilsPlatform get instance => _instance;

  static set instance(ExamOhosUtilsPlatform instance) {
    PlatformInterface.verifyToken(instance, _token);
    _instance = instance;
  }

  Future<String> getPlatformVersion();
}

// Flutter plugin implementation using MethodChannel
class MethodChannelExamOhosUtils extends ExamOhosUtilsPlatform {
  final methodChannel = const MethodChannel('exam_ohos_utils');

  @override
  Future<String> getPlatformVersion() async {
    return await methodChannel.invokeMethod<String>('getPlatformVersion');
  }
}

// Client-facing utility class
class ExamOhosUtils {
  Future<String> getPlatformVersion() {
    return ExamOhosUtilsPlatform.instance.getPlatformVersion();
  }
}

4. Flutter App Invocation

// Trigger the plugin method
ExamOhosUtils().getPlatformVersion().then((version) {
  print("HarmonyOS Version: $version");
}).catchError((error) {
  print("Error: $error");
});

Key Notes

  1. Plugin Registration:
    • The ExamOhosUtilsPlugin must be registered in EntryAbility to handle method calls.
    • Use MethodChannel to define custom communication protocols.
  2. Native Integration:
    • The OHOS-side code handles platform-specific logic (e.g., invoking Alipay SDK).
    • Flutter clients interact with the plugin via asynchronous method calls.
  3. Error Handling:
    • Use try/catch blocks and MethodResult to handle exceptions gracefully.


This content originally appeared on DEV Community and was authored by flfljh


Print Share Comment Cite Upload Translate Updates
APA

flfljh | Sciencx (2025-06-27T00:59:42+00:00) Flutter HarmonyOS Plugin Development Tutorial (Part 1). Retrieved from https://www.scien.cx/2025/06/27/flutter-harmonyos-plugin-development-tutorial-part-1/

MLA
" » Flutter HarmonyOS Plugin Development Tutorial (Part 1)." flfljh | Sciencx - Friday June 27, 2025, https://www.scien.cx/2025/06/27/flutter-harmonyos-plugin-development-tutorial-part-1/
HARVARD
flfljh | Sciencx Friday June 27, 2025 » Flutter HarmonyOS Plugin Development Tutorial (Part 1)., viewed ,<https://www.scien.cx/2025/06/27/flutter-harmonyos-plugin-development-tutorial-part-1/>
VANCOUVER
flfljh | Sciencx - » Flutter HarmonyOS Plugin Development Tutorial (Part 1). [Internet]. [Accessed ]. Available from: https://www.scien.cx/2025/06/27/flutter-harmonyos-plugin-development-tutorial-part-1/
CHICAGO
" » Flutter HarmonyOS Plugin Development Tutorial (Part 1)." flfljh | Sciencx - Accessed . https://www.scien.cx/2025/06/27/flutter-harmonyos-plugin-development-tutorial-part-1/
IEEE
" » Flutter HarmonyOS Plugin Development Tutorial (Part 1)." flfljh | Sciencx [Online]. Available: https://www.scien.cx/2025/06/27/flutter-harmonyos-plugin-development-tutorial-part-1/. [Accessed: ]
rf:citation
» Flutter HarmonyOS Plugin Development Tutorial (Part 1) | flfljh | Sciencx | https://www.scien.cx/2025/06/27/flutter-harmonyos-plugin-development-tutorial-part-1/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.