كتابة كود Kotlen داخل تطبيق Flutter
مقدمة : -
بما أننا نعرف أن ال Flutter تستخدم ك multi-platform applications 1اى انها تكتب تطبيقات للأندرويد و لل IOS
لكن هذا لا يمنع ان هناك أوقات نحتاج الى استخدام كود Native سواء كان كوتلن او جافا مع الأندرويد , أو مع ال IOS
لذلك دعنى أحدثك عن طريقة كتابة كود كوتلن مع ال Fliutter وطريقة محاكاته واستخدامه
خطوات العمل :
- من خلال Flutter سوف نقوم بإرسال رساله الى Host أيا كان سواءا الأندرويد أو ال IOS من خلال Platfporm-Channel
- يأتى دور ال Host أن يستمع الى الرساله
- ثم يستخدم لغته الأساسيه فى تنفيذ المطلوب ومن ثم ارسال الرد الى Flutter
الخطوة الأولى :
- عمل قناه وصل بين ال Flutter و ال Android باستخدام داله MethodChannel ونمرر لها اسم القناه , عن طريق تعريف Platform , وليكن اسم القناه packageName.com/common, غالبا بيكون نفس اسم الباكج + اسم الداله
MethodChannel هى داله التى ننادى بها على طرف الأندرويد , FlutterMessageChannel فى طرف ال IOS
static const platform = MethodChannel(packageName.com/common');
- مازلنا فى الخطوه الأولى فى جهه ال Flutter سوف نقوم بالنداء على الداله التى نريدها فى ناحيه الاندرويد عن طريق داله InvokeMethod , طبعا بتكون فى Try/Catch لان احتمال الخطأ ونستقبل القيمه التى نتوقعها , فى هذه الحاله نتوقع قيمه نصيه سوف تخزن فى متغير result عن طريق نداء الداله التى معرفها GetString FromAndroid
وهذا عن طريق عمل كلاس جديد نعرف فيه دالتنا
import 'package:flutter/services.dart';
abstract class AndroidMethods {
static const platform = MethodChannel('whatsappstatussaver.com/common');
static Future<String> getAndroidVersion() async {
return await platform.invokeMethod("getAndroidVersion");
}
- مازلنا فى طرف ال flutter , يجب علينا الان تحديث واجهتنا حتى نستقبل القيمه التى ترجع من ال platform , وذلك اما عن طريق setState () , أو اى State Management اخرى
الخطوة الثانية :
- فى ناحيه الاندرويد نبدأ بعمل الكود الذى نريده ,
- استدعاء نفس الداله من خلال نفس المعرف لها على المنصه التى نستهدفهاولتكن منصه الاندرويد بلغه الكوتلن ,
- نوم بكتابه كود يقوم بجلب Api
package com.example.whatsapp_status_saver
import android.media.MediaScannerConnection
import android.os.Build
import android.os.Handler
import android.os.Looper
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import androidx.annotation.NonNull
class MainActivity: FlutterActivity() {
private val CHANNEL = "whatsappstatussaver.com/common"
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler {
call, rawResult ->
val result = MethodResultWrapper(rawResult)
when (call.method) {
"getAndroidVersion" -> {
result.success(Build.VERSION.RELEASE)
return@setMethodCallHandler
}
else -> result.notImplemented()
}
}
}
private class MethodResultWrapper(result: MethodChannel.Result) :
MethodChannel.Result {
private val methodResult: MethodChannel.Result
private val handler: Handler
init {
methodResult = result
handler = Handler(Looper.getMainLooper())
}
override fun success(result: Any?) {
handler.post {
methodResult.success(result)
}
}
override fun error(errorCode: String, errorMessage: String?, errorDetails: Any?) {
handler.post {
methodResult.error(errorCode, errorMessage, errorDetails)
}
}
override fun notImplemented() {
handler.post {
methodResult.notImplemented()
}
}
}
}
الخطوة الثالثة :
- العوده الى فلاتر FLutter واستدعاء الداله التى قمنا بها سابقا فى الكلاس المنفصل حتى نأخد قيمه Api التى قمنا بها فى الاندرويد
Future<void> getVersion() async {
String aVersion = await AndroidMethods.getAndroidVersion().catchError((Object err) {
Fluttertoast.showToast(
msg: "Error getting android version!",
toastLength: Toast.LENGTH_LONG);
debugPrint(err.toString());
});
من أجل أن نستوعب الدرس جيدا , قم بعمل كود يقوم بارجاع نسبه شحن البطاريه , وتأكد من فهمك الصحيح للدرس
نسألكم الدعاء
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !