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()
}
}
}
執行結果