كتابة كود Kotlen داخل تطبيق Flutter

كتابة كود Kotlen داخل تطبيق Flutter

كتابة كود  Kotlen  داخل  تطبيق Flutter

مقدمة : -

بما أننا نعرف أن ال  Flutter  تستخدم  ك    multi-platform applications  1اى انها تكتب تطبيقات  للأندرويد و لل  IOS
لكن هذا لا يمنع ان هناك أوقات نحتاج الى استخدام كود   Native  سواء كان   كوتلن او جافا مع الأندرويد , أو مع ال  IOS
لذلك دعنى أحدثك عن طريقة كتابة كود كوتلن مع ال  Fliutter  وطريقة محاكاته واستخدامه

 


خطوات العمل :

  1. من خلال Flutter  سوف نقوم بإرسال رساله الى  Host  أيا كان سواءا الأندرويد أو ال  IOS  من خلال Platfporm-Channel
  2. يأتى دور ال  Host  أن يستمع الى الرساله
  3. ثم يستخدم لغته الأساسيه فى تنفيذ المطلوب ومن ثم ارسال الرد الى 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
إعجاب
239
مشاهدات
0
مشاركة
1
متابع

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !