کانال‌های متد (Method Channels) در فلاتر یک مکانیزم قدرتمند برای برقراری ارتباط بین کد دارت و کدهای Native پلتفرم‌های اندروید و iOS هستند. این کانال‌ها به شما امکان می‌دهند تا:



  • از کد Dart به کد Native پلتفرم‌ها تابع ارسال کنید.
  • از کد Native پلتفرم‌ها به کد Dart تابع دریافت کنید.
  • داده‌ها را بین کد Dart و کد Native پلتفرم‌ها تبادل کنید.




یک پروژه فلاتر به شکل ساده ایجاد میکنیم که شامل یک دکمه شناور است. قصد داریم کاربر با کلیک روی این دکمه یک پیام Toast دریافت کند.



final platform = MethodChannel("com.platform"); @override Widget build(BuildContext context) { return Scaffold( floatingActionButton: FloatingActionButton( child: Text("Start"), onPressed: () async{ platform.invokeMethod("toast",{ "name":"Flutter-learn.ir" }); }, ), appBar: AppBar(), body: Container( child: Center( child: Text("Homepage: "), ), ), ); }



برای بخش کاتلین هم وارد فایل MainActivity شوید و کدهای زیر را قرار دهید.


class MainActivity: FlutterActivity() { val channel_name = "com.platform" override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) var channel = MethodChannel(flutterEngine.dartExecutor.binaryMes senger,channel_name) channel.setMethodCallHandler { call, result -> if(call.method=="toast"){ var arg = call.argument<String>("name") Toast.makeText(this,"Yohouou $arg",Toast.LENGTH_SHORT).show() } } }}

در این بخش ابتدا نام کانال ارتباطی را در یک متغیر ذخیره میکنیم. سپس متد configureFlutterEngine را بازنویسی میکنیم.


در این متد یک شی مجددا از کلاس MethodChannel ایجاد میکنیم.


بعد از ساخت شی از متد setMethodCallHandler استفاده میکنیم تا دستوراتی که از طیق کانال متد ارسال میشود را دریافت کنیم.


[COLOR=white !important]


[/COLOR]
منبع: آموزش Method Channel در فلاتر