آموزش نوشتن کد خاص اندروید در برنامه نویسی فلاتر

3 سال پیش

آموزش نوشتن کد خاص اندروید در برنامه نویسی فلاتر

در این درس از آموزش های برنامه نویسی سایت سورس باران، به آموزش نوشتن کد خاص اندروید در برنامه نویسی فلاتر خواهیم پرداخت.

فلاتر یک چارچوب کلی برای دسترسی به ویژگی خاص پلت فرم فراهم می کند. این توسعه دهنده را قادر می سازد تا عملکرد فریم ورک فلاتر را با استفاده از کد خاص پلت فرم گسترش دهد. قابلیت های خاص بستر های نرم افزاری مانند دوربین، میزان باتری، مرورگر و غیره از طریق فریم ورک به راحتی قابل دسترسی هستند.

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

کلاینت از طریق کانال پیام به میزبان پیام می فرستد. میزبان در کانال پیام گوش می دهد، پیام را دریافت می کند و عملکرد لازم را انجام می دهد و در نهایت، نتیجه را از طریق کانال پیام به مشتریکلاینت می دهد.

معماری کد خاص پلت فرم در نمودار بلوکی آورده شده در زیر نشان داده شده است –

 

پروتکل پیام رسانی از رمزگذار پیام استاندارد (کلاس StandardMessageCodec) استفاده می کند که از سریال سازی دودویی مقادیر JSON مانند اعداد، رشته ها، بولی و غیره پشتیبانی می کند. serialization و de-serialization  بین کلاینت و میزبان کار می کند.

اجازه دهید یک برنامه ساده بنویسیم تا با استفاده از Android SDK یک مرورگر را باز کنیم و نحوه کار را بفهمیم

برنامه جدید فلاتر را در Android studio ، flutter_browser_app ایجاد کنید

کد main.dart را با کد زیر جایگزین کنید

import 'package:flutter/material.dart'; 
void main() => runApp(MyApp()); 
class MyApp extends StatelessWidget { 
   @override 
   Widget build(BuildContext context) {
      return MaterialApp(
         title: 'Flutter Demo', 
         theme: ThemeData( 
            primarySwatch: Colors.blue, 
         ), 
         home: MyHomePage(title: 'Flutter Demo Home Page'),
      );
   }
}
class MyHomePage extends StatelessWidget { 
   MyHomePage({Key key, this.title}) : super(key: key); 
   final String title; 
   
   @override 
   Widget build(BuildContext context) {
      return Scaffold(
         appBar: AppBar(
            title: Text(this.title), 
         ), 
         body: Center(
            child: RaisedButton( 
               child: Text('Open Browser'), 
               onPressed: null, 
            ), 
         ), 
      ); 
   }
}

در اینجا، ما یک دکمه جدید برای باز کردن مرورگر و تنظیم متد onPressed آن به عنوان null ایجاد کرده ایم.

اکنون بسته های زیر را وارد کنید –

import 'dart:async'; 
import 'package:flutter/services.dart';

 

در اینجا، service.dart شامل قابلیت فراخوانی کد خاص پلت فرم است.

یک کانال پیام جدید در ابزارک MyHomePage ایجاد کنید.

static const platform = const 
MethodChannel('flutterapp.tutorialspoint.com/browser');

 

یک متد، _openBrowser برای فراخوانی روش خاص پلت فرم، متد openBrowser از طریق کانال پیام بنویسید.

 

Future<void> _openBrowser() async { 
   try {
      final int result = await platform.invokeMethod(
         'openBrowser', <String, String>{ 
            'url': "https://flutter.dev" 
         }
      ); 
   } 
   on PlatformException catch (e) { 
      // Unable to open the browser 
      print(e); 
   }
}

 

در اینجا، ما از platform.invokeMethod برای فراخوانی openBrowser استفاده کرده ایم (در مراحل بعدی توضیح داده خواهد شد). openBrowser یک استدلال دارد، url برای باز کردن یک url خاص.

مقدار ویژگی OnPressed RaisedButton را از null به _openBrowser تغییر دهید.

onPressed: _openBrowser ،

 

MainActivity.java را باز کنید (داخل پوشه android) و کتابخانه مورد نیاز را وارد کنید –

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 

import io.flutter.app.FlutterActivity; 
import io.flutter.plugin.common.MethodCall; 
import io.flutter.plugin.common.MethodChannel; 
import io.flutter.plugin.common.MethodChannel.MethodCallHandler; 
import io.flutter.plugin.common.MethodChannel.Result; 
import io.flutter.plugins.GeneratedPluginRegistrant;

 

برای باز کردن یک مرورگر، یک متد openBrowser بنویسید.

private void openBrowser(MethodCall call, Result result, String url) { 
   Activity activity = this; 
   if (activity == null) { 
      result.error("ACTIVITY_NOT_AVAILABLE", 
      "Browser cannot be opened without foreground 
      activity", null); 
      return; 
   } 
   Intent intent = new Intent(Intent.ACTION_VIEW); 
   intent.setData(Uri.parse(url)); 
   
   activity.startActivity(intent); 
   result.success((Object) true); 
}

 

اکنون ، نام کانال را در کلاس MainActivity تنظیم کنید –

private static final String CHANNEL = "flutterapp.tutorialspoint.com/browser";

برای تنظیم نحوه مدیریت پیام در متد onCreate کد اختصاصی android را بنویسید –

new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler( 
   new MethodCallHandler() { 
   @Override 
   public void onMethodCall(MethodCall call, Result result) { 
      String url = call.argument("url"); 
      if (call.method.equals("openBrowser")) {
         openBrowser(call, result, url); 
      } else { 
         result.notImplemented(); 
      } 
   } 
});

 

در اینجا، ما یک کانال پیام با استفاده از کلاس MethodChannel ایجاد کرده ایم و از کلاس MethodCallHandler برای مدیریت پیام استفاده کرده ایم. onMethodCall متدی واقعی است که با بررسی پیام ، کد ویژه بستر صحیح را فراخوانی می کند. متد onMethodCall آدرس url را از پیام استخراج می کند و سپس openBrowser را فقط وقتی فراخوانی می کند که openBrowser فراخوانی می کند. در غیر این صورت، متد notImplemented را برمی گرداند.

کد منبع کامل برنامه به شرح زیر است –

main.dart

MainActivity.java

package com.tutorialspoint.flutterapp.flutter_browser_app; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import io.flutter.app.FlutterActivity; 
import io.flutter.plugin.common.MethodCall; 
import io.flutter.plugin.common.MethodChannel.Result; 
import io.flutter.plugins.GeneratedPluginRegistrant; 

public class MainActivity extends FlutterActivity { 
   private static final String CHANNEL = "flutterapp.tutorialspoint.com/browser"; 
   @Override 
   protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      GeneratedPluginRegistrant.registerWith(this); 
      new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
         new MethodCallHandler() {
            @Override 
            public void onMethodCall(MethodCall call, Result result) {
               String url = call.argument("url"); 
               if (call.method.equals("openBrowser")) { 
                  openBrowser(call, result, url); 
               } else { 
                  result.notImplemented(); 
               }
            }
         }
      ); 
   }
   private void openBrowser(MethodCall call, Result result, String url) {
      Activity activity = this; if (activity == null) {
         result.error(
            "ACTIVITY_NOT_AVAILABLE", "Browser cannot be opened without foreground activity", null
         ); 
         return; 
      } 
      Intent intent = new Intent(Intent.ACTION_VIEW); 
      intent.setData(Uri.parse(url)); 
      activity.startActivity(intent); 
      result.success((Object) true); 
   }
}

 

main.dart

import 'package:flutter/material.dart'; 
import 'dart:async'; 
import 'package:flutter/services.dart'; 

void main() => runApp(MyApp()); 
class MyApp extends StatelessWidget {
   @override 
   Widget build(BuildContext context) {
      return MaterialApp(
         title: 'Flutter Demo', 
         theme: ThemeData( 
            primarySwatch: Colors.blue, 
         ), 
         home: MyHomePage(
            title: 'Flutter Demo Home Page'
         ), 
      ); 
   }
}
class MyHomePage extends StatelessWidget {
   MyHomePage({Key key, this.title}) : super(key: key); 
   final String title; 
   static const platform = const MethodChannel('flutterapp.tutorialspoint.com/browser'); 
   Future<void> _openBrowser() async {
      try {
         final int result = await platform.invokeMethod('openBrowser', <String, String>{ 
            'url': "https://flutter.dev" 
         });
      }
      on PlatformException catch (e) { 
         // Unable to open the browser print(e); 
      } 
   }
   @override 
   Widget build(BuildContext context) {
      return Scaffold( 
         appBar: AppBar( 
            title: Text(this.title), 
         ), 
         body: Center(
            child: RaisedButton( 
               child: Text('Open Browser'), 
               onPressed: _openBrowser, 
            ), 
         ),
      );
   }
}

 

برنامه را اجرا کرده و بر روی دکمه Open Browser کلیک کنید و مشاهده می کنید که مرورگر راه اندازی شده است. برنامه مرورگر – صفحه اصلی همانطور که در تصویر صفحه نشان داده شده است –

Flutter Demo Home Page

Productively Build Apps

منبع.

لیست جلسات قبل آموزش برنامه نویسی فلاتر

  1. معرفی برنامه نویسی فلاتر
  2. آموزش نصب فلاتر
  3. اصول ایجاد یک برنامه فلاتر در Android Studio
  4. معماری فریم ورک برنامه نویسی فلاتر
  5. مقدمه ای بر برنامه نویسی دارت
  6. مقدمه ای بر ویجت ها در برنامه نویسی فلاتر
  7. آموزش طرح بندی در برنامه نویسی فلاتر 
  8. ژست های حرکتی در برنامه نویسی فلاتر 
  9. مدیریت State در برنامه نویسی فلاتر
  10. آموزش انیمیشن در برنامه نویسی فلاتر

 

0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه