فلاتر یک فریم ورک برنامه نویسی چندسکویی است که این امکان را برای برنامه نویس ها فراهم میکند تا با استفاده از زبان برنامه نویسی دارت و یکبار کدنویسی از پروژه خود برای سیستم عامل و پلتفرم های مختلف خروجی تهیه کنند.
فلاتر انتخاب بسیار خوبی برای توسعه اپلیکیشن و PWA و همچنین نرم افزارهای دسکتاپ میباشد.
با این حال فلاتر هم مثل هر فریم ورک دیگری دارای مزایا و معایبی میباشد.
یکی از محدودیت های فلاتر ارتباط با سیستم عامل و اجرای برنامه های سطح پایین میباشد.
در اکثر موارد برای رفع این محدودیت نیاز به برنامه نویسی با زبان نیتیو آن سیستم عامل داریم. برای مثال استفاده از زبان کاتلین برای اندروید یا سویفت برای iOS.
کانالهای متد (Method Channels) در فلاتر یک مکانیزم قدرتمند برای برقراری ارتباط بین کد دارت و کدهای Native پلتفرمهای اندروید و iOS هستند. این کانالها به شما امکان میدهند تا:
استفاده از کانالهای متد مزایای متعددی دارد مثل دسترسی داشتن به APIهای Native پلتفرمها مانند دوربین، GPS، بلوتوث و … که در ادامه به برخی از آنها اشاره میکنیم:
1. انعطافپذیری:
کانالهای متد به شما این امکان را میدهند که به طور مستقیم به کدهای Native پلتفرمها از کد Dart دسترسی داشته باشید. این انعطافپذیری به شما امکان میدهد تا از کتابخانهها و APIهای Native پلتفرمها در برنامه Flutter خود استفاده کنید.
2. قابلیت استفاده مجدد:
شما میتوانید کانالهای متد را برای استفاده در چندین پروژه فلاتر به کار ببرید. این امر باعث صرفهجویی در زمان و تلاش شما میشود، زیرا نیازی به نوشتن کدهای مشابه برای هر پروژه نیست.
3. سادگی:
استفاده از کانالهای متد آسان است و نیاز به دانش عمیقی از برنامهنویسی Native ندارد.
4. افزایش کارایی:
با استفاده از Method Channel میتوانید از مزایای کدهای Native پلتفرمها بهرهمند شوید و کارایی برنامه خود را افزایش دهید.
5. توسعه سریعتر:
استفاده از کانالهای متد به شما کمک میکند تا برنامه خود را سریعتر توسعه دهید، زیرا نیازی به نوشتن کدهای Native برای هر پلتفرم به صورت جداگانه نیست.
6. پایداری:
Method Channel یک راه ارتباطی پایدار بین کد Dart و کد Native پلتفرمها ارائه میدهند.
7. تستپذیری:
تست کردن کدهایی که از کانالهای متد استفاده میکنند آسانتر است، زیرا میتوانید کد زبان دارت و کد Native پلتفرمها را به طور جداگانه تست کنید.
در این بخش به شکل عملی میخواهیم از قابلیت Method Channel در برنامه نویسی فلاتر استفاده کنیم.
در این پروژه با صدا زدن یک تابع در زبان کاتلین به کاربر یک پیام به شکل Toast نمایش میدهیم.
یک پروژه فلاتر به شکل ساده ایجاد میکنیم که شامل یک دکمه شناور است. قصد داریم کاربر با کلیک روی این دکمه یک پیام 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: "),
),
),
);
}
در کد بالا قبل از متد build ابتدا یک شی از کلاس MethodChannel ایجاد کرده ایم. هنگام ساخت این شی یک رشته هم به عنوان شناسا یا آیدی برای آن قرار میدهیم که یک اسم دلخواه میباشد.
از این اسم در سمت کدهای نیتیو کاتلین نیز استفاده میکنیم.
در بخش build برای رابط کابری از ویجت Scaffold به عنوان لایه اصلی استفاده کردیم که به ویجت دکمه شناور دسترسی داشته باشیم.
در رویداد کلیک این دکمه متد invokeMethod را با استفاده از شی ساخته شده صدا میزنیم.
پارامتر اولی که به عنوان “toast” قرار داده ایم نام تابع میباشد.
در واقع در سمت کاتلین نیز همین نام toast را بررسی میکنیم تا متوجه بشیم که آیا عملیاتی که میخواهیم انجام دهیم مرتبط با این دکمه است یا خیر. در واقع این نام هم همانند یک آیدی میباشد که مشخص میکند قصد انجام چه عملیاتی را داریم.
پارامتر دوم که بصورت Key-Value میباشد پارامترهای ارسالی از سمت فلاتر به بخش کاتلین میباشد.
یک پارامتر با کلید name به کدهای اندروید ارسال میکنیم.
در بخش قبلی کدهای سمت فلاتر را پیاده سازی کردیم, حالا باید در بخش کاتلین بتوانیم ارتباط ایجاد شده را دریافت و پردازش کنیم.
ابتدا روی پوشه android کلیک کنید و گزینه flutter سپس Open Android module in Android Studio را انتخاب کنید تا پوشه اندروید به عنوان پروژه جداگانه باز شود.
وارد فایل MainActivity شوید و کدهای زیر را قرار دهید.
class MainActivity: FlutterActivity() {
val channel_name = "com.platform"
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
var channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger,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 استفاده میکنیم تا دستوراتی که از طیق کانال متد ارسال میشود را دریافت کنیم.
در اینجا میخواهیم فقط به درخواست نمایش Toast جواب دهیم به همین خاطر از یک شرط برای فیلتر کردن متدها استفاده میکنیم.
در صورتی که شرط call.method==”toast” صحیح بود کار نمایش Toast را انجام میدهیم.
برای دریافت اطلاعات ارسال شده از سمت فلاتر نیز از دستور call.argument(“name” استفاده میکنیم.
بدین ترتیب به راحتی با بخش Native ارتباط برقرار کردیم.
برای یادگیری کامل مباحث مربوط به Method Channel میتوانید از دوره آموزشی فلاتر استفاده نمایید.
گیتهاب اکشن GitHub Actions یکی از ابزارهای گیتهاب است که به شما کمک میکنه تا…
اگر یک برنامه نویس فلاتر هستید و با از نسخه وب اپلیکیشن پروژتون استفاده میکنید…
به عنوان یک برنامه نویس فلاتر یا اندروید بعد از اتمام پروسه طراحی اپلیکیشن نیاز…
طراحی رابط کاربری اپلیکیشن پادکست خود را با استفاده از این کیت توسعه UI/UX فلاتر…
فایربیس، پلتفرمی قدرتمند از شرکت گوگل برای توسعه و مدیریت برنامههای موبایل و وب است.…
فلاتر یک فریم ورک برنامه نویسی چندسکویی است که به وسیله آن میتوانید برای سیستم…
View Comments
داداش دستت درد نکنه واقعا آموزشات تخصصی کاربردی هستن👌🙏