Flutter 調用Android原生方法

flutter代碼

import 'dart:io';

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

void main() {
  runApp(MaterialApp(
    debugShowCheckedModeBanner: false,
    title: '測試程序',
    theme: ThemeData(primaryColor: Colors.greenAccent),
    home: MyApp(),
  ));
  if (Platform.isAndroid) {
    //實現沉浸式狀態欄
    SystemUiOverlayStyle systemUiOverlayStyle =
        SystemUiOverlayStyle(statusBarColor: Colors.transparent);
    SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    //第一種修改狀態欄字體顏色
    return Scaffold(
      appBar: AppBar(
        title: Text('data'),
        centerTitle: true,
        brightness: Brightness.light, //Brightness.dark 有appbar實現方式
      ),
      body: Container(
          color: Colors.amber,
          child: Center(
            child: RaisedButton(
              onPressed: () async {
                String result = await androidMethodExec();
                print(result.toString());
              },
              child: Text('點我'),
            ),
          )),
    );

    //第二種修改狀態欄字體顏色
    return AnnotatedRegion<SystemUiOverlayStyle>(
        child: Container(
          color: Colors.amber,
        ),
        value: SystemUiOverlayStyle.dark //SystemUiOverlayStyle.light 兩種樣式
        );
  }

  Future<String> androidMethodExec() async {
    const platform = const MethodChannel('com.test/name');
    String result = "";
    try {
      result = await platform.invokeMethod('androidMethodExec',{'canshu1':'ssssss1','canshu2':'ssssss2'});
    } on Exception catch (e) {
      print(e.toString());
    }
    return result;
  }
}

Android原生 代碼

MainActivity.kt

package com.example.flutter_test_app

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        flutterEngine.plugins.add(FlutterNativePlugin())
    }
}

FlutterNativePlugin.kt

package com.example.flutter_test_app

import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.PluginRegistry

class FlutterNativePlugin : FlutterPlugin,MethodChannel.MethodCallHandler {
    override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
        val channel = MethodChannel(binding.flutterEngine.dartExecutor,"com.test/name")
        channel.setMethodCallHandler(FlutterNativePlugin())
    }

    companion object{
        fun registerWith(registrar: PluginRegistry.Registrar){
            val channel = MethodChannel(registrar.messenger(),"com.test/name")
            channel.setMethodCallHandler(FlutterNativePlugin())
        }
    }

    override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
    }

    override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
        if(call.method == "androidMethodExec"){
            result.success("android原生執行::"+call.arguments.toString()+call.method)
        }else{
            result.notImplemented()
        }
    }
}

執行結果

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章