フラッターモジュールとフラッタープラグインの違いは何ですか?


あなたはフラッタプラグインとフラッターモジュールの違いを知りたいですか?はい、ここで、このブログは、これらの概念についてより良いアイデアを与えることができます.
一般に、プラグインは非常に効果的にフラッターに容易に利用できるネイティブの機能を作ることについてです.モジュールは、既存のネイティブアプリケーションの助けを借りてフラッターを統合することができます.これらはフラッタプラグインとフラッタモジュールの主な違いです.さらに下に進んでください.

どのようにフラッタプラグインを作成するには?


一般に、フラッタプラグインはIOSやAndroidなどのネイティブコードのラッパーであると考えられます.あなたは、IOSやJavaやKollinのためのプラグインを作成するためのIOSとAndroid固有のコードを書くためのオブジェクトのCまたはSwiftを使用することができます.
メッセージパッシングとプラットホームチャンネルを使用することによって、フラッターはネイティブアプリケーションと同様のことをすることができます.フラッターは、ネイティブのIOSやAndroidのアクションを作成し、ダーツに結果を返すように指示されます.
フラッターアプリケーションのディレクトリ構造を使用すると、詳細を収集することができます.IARTとAndroidディレクトリには、DARTコードからなるlibディレクトリと一緒に気づくことができます.これは、IOSとAndroidのホストから構成され、ネイティブのプロジェクトは、コンパイルされたDARTを実行することができます.
プラットフォーム・チャンネルを作成することは、ホストとDART(IOSとAndroid)で、MethodChannelのようなコミュニケーションを導入することを非常に要求されます.
MethodChannelはフラッタにIOSとAndroidのネイティブコードを通信するために便利です.

なぜフラッタプラグインが必要ですか?


フラッターは、SDK、ジオロケーション、ビデオ通話SDKなどの多くのことをサポートしていませんはるかに.フラッタープロジェクトでこのようなことを使用するには、contact the professional Flutter Agencyです.そこの専門家は、ネイティブコードIOSとAndroidで非常に効果的にプラグインを書くことができます.

独自のプラグインの作成


プラグインを作成する前に、プラグインがすでに存在しているかどうかを調べなければなりません.
次の手順に従ってプラグインを作成します.
を使用することができます
flutter create --org com.flutteragency.plugindemo.flutter_plugin_demo --template=plugin --platforms=android,ios -a kotlin flutter_plugin_demo
  • 最初に、Android Studioを開く必要があります.
  • そして、
  • はファイル>> new new tterプロジェクトになりました.
  • は、新しいフラッター・プロジェクトオプション
  • を選びます
    create Flutter Plugin from VSCode
    次に、プラグインの名前を設定します

    project - name -> libの下でファイルをチェックすると、デフォルトのコードが
    import 'dart:async';
    import 'package:flutter/services.dart';
    
    class FlutterPluginDemo {
    static const MethodChannel _channel =
    const MethodChannel('flutter_plugin_demo');
    
    static Future get platformVersion async {
    final String version = await _channel.invokeMethod('getPlatformVersion');
    return version;
    }
    }
    
    ここでは、platformVersionがメソッドを呼び出すにはChannel Channelを尋ねているプロパティを見つけることができます.これは、IOSとAndroidの両方で定義されているプラットフォームのバージョンを取得します.今、あなたはこのバージョンを取得することができます後に' getplatfromversionからフラッタープロジェクトにバージョンを返します.
    このバージョンは静的なgetメソッドinitplatformstatus ()から特定のメインで取得できます.例ディレクトリの周りのDARTファイル.

    アンドロイドネイティブコード( Javaコード):


    Androidのセクションで利用可能なコードをチェックすることができます.
    パッケージcom.フラッシュ式.プラグイン.のプラグインです
    import androidx.annotation.NonNull
    import io.flutter.embedding.engine.plugins.FlutterPlugin
    import io.flutter.plugin.common.MethodCall
    import io.flutter.plugin.common.MethodChannel
    import io.flutter.plugin.common.MethodChannel.MethodCallHandler
    import io.flutter.plugin.common.MethodChannel.Result
    import io.flutter.plugin.common.PluginRegistry.Registrar
    
    class FlutterPluginDemoPlugin: FlutterPlugin, MethodCallHandler {
    private lateinit var channel : MethodChannel
    
    override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
    channel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter_plugin_demo")
    channel.setMethodCallHandler(this)
    }
    
    override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
    if (call.method == "getPlatformVersion") {
    result.success("Android ${android.os.Build.VERSION.RELEASE}")
    } else {
    result.notImplemented()
    }
    }
    
    override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
    channel.setMethodCallHandler(null)
    }
    }
    
    FlutterPluginクラスプラグインはMethodCallhandlerを実装します.したがって、OnMethodCallメソッドをオーバーライドする必要があります.

    IOSのネイティブコード


    輸入フラッター
    インポートuikit
    public class SwiftFlutterPluginDemoPlugin: NSObject, FlutterPlugin {
    public static func register(with registrar: FlutterPluginRegistrar) {
    let channel = FlutterMethodChannel(name: "flutter_plugin_demo", binaryMessenger: registrar.messenger())
    let instance = SwiftFlutterPluginDemoPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
    }
    
    public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    result("iOS " + UIDevice.current.systemVersion)
    }
    }
    

    プラットフォーム固有のコード


    アンドロイドネイティブコード( ProjectChortName -> android -> src ):
    パッケージcom.フラッシュ式.プラグイン.プラグインのデモ
    import android.app.Activity;
    import android.app.Dialog;
    import io.flutter.plugin.common.MethodCall;
    import io.flutter.plugin.common.MethodChannel;
    import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
    import io.flutter.plugin.common.MethodChannel.Result;
    import io.flutter.plugin.common.PluginRegistry.Registrar;
    
    /** FlutterPluginDemoPlugin*/
    public class FlutterPluginDemoPlugin implements MethodCallHandler {
    /** Plugin registration. */
    Activity context;
    MethodChannel methodChannel;
    public static void registerWith(Registrar registrar) {
    final MethodChannel channel = new MethodChannel(registrar.messenger(), "flutter_plugin_demo");
    channel.setMethodCallHandler(new FlutterPluginDemoPlugin(registrar.activity(), channel));
    }
    
    public FlutterPluginDemoPlugin(Activity activity, MethodChannel methodChannel) {
    this.context = activity;
    this.methodChannel = methodChannel;
    this.methodChannel.setMethodCallHandler(this);
    }
    
    @Override
    public void onMethodCall(MethodCall call, Result result) {
    if (call.method.equals("getPlatformVersion")) {
    result.success("Android " + android.os.Build.VERSION.RELEASE);
    }
    else if(call.method.equalsIgnoreCase("showAlertDialog")) {
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setMessage("Do you want to exit ?");
    builder.setTitle("Alert !");
    builder.setCancelable(false);
    builder
    .setPositiveButton(
    "Yes",
    new DialogInterface
    .OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    finish();
    }
    });
    
    builder
    .setNegativeButton(
    "No",
    new DialogInterface
    .OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    dialog.cancel();
    }
    });
    AlertDialog alertDialog = builder.create();
    alertDialog.show();
    }
    else {
    result.notImplemented();
    }
    }
    }
    
    IOSのネイティブコード
    輸入フラッター
    インポートuikit
    public class SwiftFlutterPluginDemoPlugin: NSObject, FlutterPlugin {
    public static func register(with registrar: FlutterPluginRegistrar) {
    let channel = FlutterMethodChannel(name: "flutter_plugin_demo", binaryMessenger: registrar.messenger())
    let instance = SwiftFlutterPluginDemoPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
    }
    public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    if (call.method == "getPlatformVersion") {
    result("iOS " + UIDevice.current.systemVersion)
    }
    else if (call.method == "showAlertDialog") {
    DispatchQueue.main.async {
    let alert = UIAlertController(title: "Alert", message: "Hi, My name is flutter", preferredStyle: .alert);
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil))
    UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true, completion: nil);
    }
    }
    }
    }
    
    最後に、フラッタプラグインを作成できます.

    出力:



    フラッタモジュールの開発


    ここでは、ディレクトリはflutterとdartでモジュールを作成することをあなたに示すことができます.その間、モジュールはコアFuchsiaビルドに基づいてモジュールが開発されると仮定できます.その後、ブートストラップに含まれます.

    基本


    フラッターモジュールは、ModuledRiverを使用することができますフラッターアプリです.main ()の内容を知るには、下記のコードを調べてください.
    final ModuleDriver _driver = ModuleDriver();
    void main() {
    setupLogger(name: 'Hello mod');
    
    _driver.start().then((ModuleDriver driver) {
    log.info('Hello mod started');
    });
    runApp(
    MaterialApp(
    title: 'Hello mod',
    home: ScopedModel<_MyModel>(
    model: _MyModel(),
    child: _MyScaffold(),
    ),
    ),
    );
    }
    

    パッケージのインポート


    ビルド依存性の追加GN
    import("//topaz/runtime/flutter_runner/flutter_app.gni")
    flutter_app("hello_mod") {
    main_dart = "main.dart"
    package_name = "hello_mod"
    fuchsia_package_name = "hello_mod"
    deps = [
    "//topaz/public/dart/widgets:lib.widgets",
    "//topaz/public/lib/app_driver/dart",
    ]
    }
    
    ビルドとして含めることができる2つの主要な種類のDARTパッケージがあります.GN依存性.
  • 通常のダーツパッケージ
  • 任意の規則的なDARTパッケージまたはサードパーティのDARTパッケージを手動でFuchsiaツリーに書き込むことができます.
  • のFIDLは、ダーツビンディング
  • を生成しました
    まずビルドをチェックしなければなりません.GNは目標からなるターゲットを定義する.FIDLファイル.次に、FIDL生成のDART結合を使用できます.

    まとめ


    あなたは簡単にすべての問題なしフラッターを使用してプラグインやモジュールを作成する することができます.上記のシナリオから、今、あなたはフラッタプラグインとフラッタモジュールの違いについての考えを持っています.我々は非常に経験豊富なフラッタ開発者と私たちのクライアントを支援するためにコミットされ、彼らはクラスと信頼性の高いソリューションを得るのに役立ちます.