Flutter自定义功能插件test_bmrt_flugin的使用

Flutter自定义功能插件test_bmrt_flugin的使用

在本教程中,我们将学习如何在Flutter项目中使用自定义功能插件test_bmrt_flugin。我们将创建一个简单的示例应用来展示该插件的基本用法。

示例代码

首先,我们来看一下main.dart文件中的代码:

import 'dart:io';
import 'package:test_bmrt_flugin/test_bmrt_flugin.dart';
import 'package:flutter/material.dart';
import 'dart:async';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await launchTestBmrtFlugin((bool isTestBmrtLaunched) async {
    runApp(const MyApp());
  });
}

Future<void> launchTestBmrtFlugin(void Function(bool isTestBmrtLaunched) appRunner) async {
  var token = "";
  if (Platform.isAndroid) {
    token = "0c56d0ba-a589-4aae-9f7d-519fdf4f680b";
  } else if (Platform.isIOS) {
    token = "";
  }
  await TestBmrtFlugin.launch(token);
  appRunner(true);
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'BMRT LAUNCH',
            ),
            ElevatedButton(
              onPressed: () {
                // 这里可以调用插件的其他功能方法
              },
              child: Text("Screen Navigation"),
            ),
            SizedBox(height: 100,),
            Text('Running on:'),
            SizedBox(height: 100,),
            Text('Running on:'),
          ],
        ),
      ),
    );
  }
}

详细步骤

  1. 初始化插件main()函数中,我们需要确保Flutter绑定已初始化,并且通过调用launchTestBmrtFlugin函数来启动插件。

    Future<void> main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await launchTestBmrtFlugin((bool isTestBmrtLaunched) async {
        runApp(const MyApp());
      });
    }
    
  2. 配置平台特定的token 根据当前运行的平台(Android或iOS),设置相应的token。

    Future<void> launchTestBmrtFlugin(void Function(bool isTestBmrtLaunched) appRunner) async {
      var token = "";
      if (Platform.isAndroid) {
        token = "0c56d0ba-a589-4aae-9f7d-519fdf4f680b";
      } else if (Platform.isIOS) {
        token = "";
      }
      await TestBmrtFlugin.launch(token);
      appRunner(true);
    }
    
  3. 创建主应用类 创建一个继承自StatelessWidgetMyApp类,用于设置应用的主题和其他全局配置。

    class MyApp extends StatelessWidget {
      const MyApp({super.key});
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            useMaterial3: true,
          ),
          home: const MyHomePage(title: 'Flutter Demo Home Page'),
        );
      }
    }
    
  4. 创建主页 创建一个继承自StatefulWidgetMyHomePage类,用于构建应用的主页。

    class MyHomePage extends StatefulWidget {
      const MyHomePage({super.key, required this.title});
    
      final String title;
    
      @override
      State<MyHomePage> createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            backgroundColor: Theme.of(context).colorScheme.inversePrimary,
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                const Text(
                  'BMRT LAUNCH',
                ),
                ElevatedButton(
                  onPressed: () {
                    // 这里可以调用插件的其他功能方法
                  },
                  child: Text("Screen Navigation"),
                ),
                SizedBox(height: 100,),
                Text('Running on:'),
                SizedBox(height: 100,),
                Text('Running on:'),
              ],
            ),
          ),
        );
      }
    }
    

更多关于Flutter自定义功能插件test_bmrt_flugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义功能插件test_bmrt_flugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中创建和使用自定义插件 test_bmrt_plugin 的示例。这个示例将展示基本的插件结构,以及如何从原生Android和iOS代码中调用功能。

1. 创建Flutter插件项目

首先,使用Flutter命令行工具创建一个新的插件项目:

flutter create --template=plugin -i swift,kotlin test_bmrt_plugin

这个命令会创建一个包含Android(Kotlin)和iOS(Swift)原生代码的Flutter插件项目。

2. 实现插件功能

Android(Kotlin)

android/src/main/kotlin/com/example/test_bmrt_plugin/TestBmrtPlugin.kt 中实现一个简单的功能,比如返回一个平台版本信息:

package com.example.test_bmrt_plugin

import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.activity.ActivityAware
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
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 android.os.Build
import android.content.Context

class TestBmrtPlugin: FlutterPlugin, MethodCallHandler, ActivityAware {
  private lateinit var context: Context
  private lateinit var channel: MethodChannel

  override fun onAttachedToEngine(flutterPluginBinding: FlutterPluginBinding, binaryMessenger: BinaryMessenger) {
    context = flutterPluginBinding.applicationContext
    channel = MethodChannel(flutterPluginBinding.binaryMessenger, "test_bmrt_plugin")
    channel.setMethodCallHandler(this)
  }

  override fun onMethodCall(call: MethodCall, result: Result) {
    if (call.method == "getPlatformVersion") {
      result.success("Android ${android.os.Build.VERSION.RELEASE}")
    } else {
      result.notImplemented()
    }
  }

  override fun onDetachedFromEngine(binding: FlutterPluginBinding) {
    channel.setMethodCallHandler(null)
  }

  override fun onAttachedToActivity(binding: ActivityPluginBinding) {
    // No-op
  }

  override fun onDetachedFromActivityForConfigChanges() {
    // No-op
  }

  override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
    // No-op
  }

  override fun onDetachedFromActivity() {
    // No-op
  }
}

iOS(Swift)

ios/Classes/TestBmrtPlugin.swift 中实现相同的功能:

import Flutter

public class TestBmrtPlugin: NSObject, FlutterPlugin {
  public static func register(with registrar: FlutterRegistrar) {
    let channel = FlutterMethodChannel(name: "test_bmrt_plugin", binaryMessenger: registrar.messenger())
    let instance = TestBmrtPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  }

  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    if call.method == "getPlatformVersion" {
      let version = ProcessInfo.processInfo.operatingSystemVersion.string(by: .major) ?? "0"
      result(version)
    } else {
      result(FlutterMethodNotImplemented)
    }
  }
}

3. 使用插件

在Flutter项目中添加插件依赖

在你的Flutter项目的 pubspec.yaml 文件中添加对本地插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  test_bmrt_plugin:
    path: ../path/to/your/plugin

注意:将 ../path/to/your/plugin 替换为你的插件项目的实际路径。

在Flutter中使用插件

在你的Flutter项目的主Dart文件中(如 lib/main.dart),导入插件并使用其功能:

import 'package:flutter/material.dart';
import 'package:test_bmrt_plugin/test_bmrt_plugin.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  static const platform = MethodChannel('test_bmrt_plugin');

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: FutureBuilder<String>(
            future: platform.invokeMethod('getPlatformVersion'),
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.hasError) {
                  return Text('Failed to get platform version: ${snapshot.error}');
                } else {
                  return Text('Running on: ${snapshot.data}');
                }
              } else {
                return CircularProgressIndicator();
              }
            },
          ),
        ),
      ),
    );
  }
}

4. 运行Flutter应用

确保你已经连接了一个Android设备或启动了iOS模拟器,然后在Flutter项目的根目录下运行:

flutter run

这样,你的Flutter应用就应该能够调用自定义插件 test_bmrt_plugin 并显示平台版本信息了。

回到顶部