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

پروتکل پیام رسانی از یک کدک پیام استاندارد استفاده می کند (کلاس StandardMessageCodec) که از سریال سازی باینری مقادیر شبیه JSON مانند اعداد ، رشته ها ، بول و غیره پشتیبانی می کند ، serialization de-serialization به طور شفاف بین client و هاست می کند.
بگذارید یک برنامه ساده برای نوشتن مرورگر با استفاده از SDK Android بنویسیم و درک کنیم چگونه
- یک برنامه جدید Flutter را در studio Android ایجاد کنید ، flutter_browser_app
- کد main.dart را با کد زیر جایگزین کنید –
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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, ), ), ); } } |
- در اینجا ، ما button جدیدی را برای باز کردن مرورگر ایجاد کرده ایم و متد onPress را به صورت null تنظیم کرده ایم.
- اکنون package های زیر را import کنید –
1 2 |
import 'dart:async'; import 'package:flutter/services.dart'; |
در اینجا ، service.dart شامل عملکردی برای استناد به کد خاص پلتفرم است.
یک massage chanel جدید را در ویجت MyHomePage ایجاد کنید.
1 2 |
static const platform = const MethodChannel('flutterapp.tutorialspoint.com/browser'); |
برای استناد به متد خاص پلت فرم ، متد openBrowser از طریق کانال پیام ، متدی بنویسید ، _openBrowser.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 یک argument دارد ، url برای باز کردن یک آدرس اینترنتی خاص .
- مقدار ویژگی onPress شده RaisedButton را از null به _openBrowser تغییر دهید.
1 |
onPressed: _openBrowser, |
MainActivity.java (درون پوشه اندرویدی) را باز کنید و کتابخانه مورد نیاز را وارد کنید –
1 2 3 4 5 6 7 8 9 10 11 |
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 برای بازکردن مرورگر وب بنویسید
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 تنظیم کنید –
1 |
private static final String CHANNEL = "flutterapp.tutorialspoint.com/browser"; |
برای تنظیم هندل کرد پیام به متد onCreate ، کد خاص Android را بنویسید –
1 |
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 برای handle کردن پیام استفاده کرده ایم. onMethodCall متدی واقعی است که وظیفه دارد با چک کردن پیام کد صحیح خاص سکوی را فراخوانی کند. روش onMethodCall آدرس URL را از پیام خارج می کند و سپس OpenBrowser را فراخوانی می کند که فراخوانی متد openBrowser باشد. در غیر این صورت ، این روش notImplemented را برمی گرداند.
کد منبع کامل برنامه به بصورت زیر است –
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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); } } |
برنامه را اجرا کرده و روی دکمه Open Browser کلیک کنید و می بینید که مرورگر راه اندازی شده است. برنامه مرورگر – صفحه اصلی همانطور که در تصویر در اینجا نشان داده شده است –
مطالب زیر را حتما مطالعه کنید
آموزش فلاتر – Flutter
ابزار توسعه فلاتر – Flutter
تبدیل اپلیکیشن فلاتر به اندروید و IOS
تست کردن در فلاتر – Flutter testing
ترجمه اپلیکیشن ها در فلاتر – Flutter
کار با دیتابیس در فلاتر -Flutter
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
کد کامل main.dart در آخر به اشتباه همان mainActivity.java هست
مقاله بسیار خوبی بود