پکیج در فلاتر – Flutter Package
متد Dart راهی است برای سازماندهی و به اشتراک گذاری مجموعه ای از function ها از طریق Package می باشد . Dart Package به سادگی کتابخانه ها یا ماژول های قابل تنظیم است. به طور کلی ، Dart Package مانند برنامه Dart است به جز Dart Package دارای main نقطه ورود برنامه نیست.
ساختار کلی Package (یک package دمو ، my_demo_package را در نظر بگیرید) به صورت زیر است –
- lib / src / * – فایل ها
- lib / my_demo_package.dart – پرونده اصلی یا فایل main کد دارت. می تواند به عنوان اپلیکیشن import شود –
1 |
export src/my_private_code.dart |
در صورت لزوم مطابق شکل زیر ممکن private code file دیگر در پرونده اصلی (my_demo_package.dart) صادر شود –
1 |
export src/my_private_code.dart |
lib / * – هر تعداد پرونده کد Dart که در هر ساختار پوشه سفارشی تنظیم شده است. به کد می توان دسترسی پیدا کرد به عنوان :
1 |
import 'package:my_demo_package/custom_folder/custom_file.dart' |
- pubspec.yaml – مشخصات پروژه ، همانند برنامه کاربردی ،
کلیه فایلهای کد Dart در Package کلاسهای Dart هستند و هیچگونه نیاز خاصی برای کد Dart وجود ندارد تا آن را در یک package import کند.
کد
مقالات
انواع Package های فلاتر
از آنجا که Dart Packages اساساً مجموعه کوچکی از عملکردهای مشابه است ، می توان آن را با توجه به عملکرد آن دسته بندی کرد.
Dart Package
کد Generic دارت ، که می تواند در محیط وب و موبایل استفاده شود. به عنوان مثال ، english_words یکی از این package ها است که شامل 5000 کلمه است و دارای توابع اساسی ابزار مانند اسم (اسم لیست در انگلیسی) ، هجا (تعداد هجا در یک کلمه است.
Flutter Package
کد Generic دارت ، که به فریمورک Flutter بستگی دارد و فقط در محیط موبایل قابل استفاده است. به عنوان مثال ، fluro یک router سفارشی برای فلاتر است. بستگی به فریمورک Flutter دارد.
Flutter Plugin
کد Generic Dart ، که بستگی به فریمورک Flutter و همچنین کد پلتفرم اساسی (Android SDK یا iOS SDK) دارد. به عنوان مثال ، camera افزونه ای است برای تعامل با دوربین دستگاه. برای دسترسی به دوربین به فریمورک Flutter وهمچنین به فریمورک فلاتر بستگی دارد
استفاده از Dart Package
پکیج های دارت hoste و در live server ، https://pub.dartlang.org میزبان و منتشر می شوند . همچنین ، فلاتر ابزار ساده ، pub برای مدیریت Dart Package در برنامه فراهم می کند. مراحل مورد نیاز برای استفاده به عنوان Package به صورت زیر است –
- همانطور که در شکل زیر آمده است نام Package و version مورد نیاز را در pubspec.yaml وارد کنید –
1 |
dependencies: english_words: ^3.1.5 |
- آخرین شماره نسخه را می توانید با چک کردن سرور آنلاین پیدا کنید.
- با استفاده از دستور زیر package را در برنامه نصب کنید –
1 |
flutter packages get |
هنگام توسعه دادن در اندروید استدیو ، android studio هرگونه تغییر در pubspec.yaml را تشخیص داده و هشدار یا Android studio package alert را مانند تصویر زیر برای توسعه دهنده نمایش می دهد.
- پیکیج های dart را می توان با استفاده از گزینه های منو در Android Studio نصب یا به روز کرد.
- فایل لازم را با دستور زیر import کنید و کار را آغاز کنید.
1 |
import 'package:english_words/english_words.dart'; |
از هر متد موجود در بسته استفاده کنید ،
1 |
nouns.take(50).forEach(print); |
در اینجا ، ما از تابع nouns برای بدست آوردن و چاپ 50 کلمه برتر استفاده کرده ایم.
توسعه Flutter Plugin Package
توسعه یک پلاگین Flutter شبیه به توسعه یک برنامه Dart یا Dart Package است. تنها استثنا این است که این افزونه قصد دارد از سیستم API (Android یا iOS) برای به دست آوردن قابلیت های خاص برنامه مورد نیاز استفاده کند.
همانطور که قبلاً نحوه دسترسی به کد پلتفرم را در فصل های قبلی آموخته ایم ، بگذارید برای درک روند توسعه افزونه ، یک افزونه ساده ، my_browser تهیه کنیم. عملکرد افزونه my_browser این است که به برنامه اجازه میدهد وب سایت داده شده را در مرورگر خاص سیستم عامل باز کند.
- استودیو Android را باز کنید.
- روی File → New Flutter Project کلیک کنید و گزینه Flutter Plugin را انتخاب کنید.
- همانطور که در اینجا نشان داده شده است ، می توانید یک پنجره Flutter plugin را مشاهده کنید –
- my_browser را به عنوان نام پروژه وارد کرده و روی Next کلیک کنید.
- نام پلاگین و سایر جزئیات را مطابق تصویر در پنجره وارد کنید –
company domain ، flutterplugins.tutorialspoint.com را در پنجره نشان داده شده در زیر وارد کنید و سپس روی Finish کلیک کنید . این یک کد راه startup برای توسعه پلاگین جدید ما ایجاد می کند.
فایل my_browser.dart را باز کنید و متد openBrowser بنویسید، برای استناد کردن متد openBrowser خاص پلتفرم
1 2 3 4 5 6 7 8 9 10 |
Future<void> openBrowser(String urlString) async { try { final int result = await _channel.invokeMethod( 'openBrowser', <String, String>{ 'url': urlString } ); } on PlatformException catch (e) { // Unable to open the browser print(e); } } |
فایل MyBrowserPlugin.java را باز کنید و کلاس های زیر را وارد کنید –
1 2 3 4 |
import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; |
- اینجا ، ما باید کتابخانه مورد نیاز برای باز کردن یک مرورگر از Android را import کنیم.
- متغیر private pmRegistrar از نوع Registrar را در کلاس MyBrowserPlugin اضافه کنید.
1 |
private final Registrar mRegistrar; |
- در اینجا ، از Registrar برای بدست آوردن اطلاعات متن کد فراخوانی استفاده می شود.
- برای تنظیم Registrar در کلاس MyBrowserPlugin یک constructor اضافه کنید.
1 2 3 |
private MyBrowserPlugin(Registrar registrar) { this.mRegistrar = registrar; } |
registerWith را تغییر دهید تا constructor جدید ما را در کلاس MyBrowserPlugin قرار گیرد یا include شود.
1 2 3 4 5 |
public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel(registrar.messenger(), "my_browser"); MyBrowserPlugin instance = new MyBrowserPlugin(registrar); channel.setMethodCallHandler(instance); } |
onMethodCall را تغییر دهید تا از متد openBrowser در کلاس MyBrowserPlugin استفاده کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 |
@Override public void onMethodCall(MethodCall call, Result result) { String url = call.argument("url"); if (call.method.equals("getPlatformVersion")) { result.success("Android " + android.os.Build.VERSION.RELEASE); } else if (call.method.equals("openBrowser")) { openBrowser(call, result, url); } else { result.notImplemented(); } } |
برای دسترسی به مرورگر در کلاس MyBrowserPlugin ، متد openBrowser مخصوص پلت فرم را بنویسید
1 2 3 4 5 6 7 8 9 10 11 12 |
private void openBrowser(MethodCall call, Result result, String url) { Activity activity = mRegistrar.activity(); 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); } |
سورس کامل افزونه my_browser به صورت زیر است -.
my_browser.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import 'dart:async'; import 'package:flutter/services.dart'; class MyBrowser { static const MethodChannel _channel = const MethodChannel('my_browser'); static Future<String> get platformVersion async { final String version = await _channel.invokeMethod('getPlatformVersion'); return version; } Future<void> openBrowser(String urlString) async { try { final int result = await _channel.invokeMethod( 'openBrowser', <String, String>{'url': urlString}); } on PlatformException catch (e) { // Unable to open the browser print(e); } } } |
MyBrowserPlugin.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 45 46 47 48 49 50 |
package com.tutorialspoint.flutterplugins.my_browser; 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.plugin.common.PluginRegistry.Registrar; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; /** MyBrowserPlugin */ public class MyBrowserPlugin implements MethodCallHandler { private final Registrar mRegistrar; private MyBrowserPlugin(Registrar registrar) { this.mRegistrar = registrar; } /** Plugin registration. */ public static void registerWith(Registrar registrar) { final MethodChannel channel = new MethodChannel( registrar.messenger(), "my_browser"); MyBrowserPlugin instance = new MyBrowserPlugin(registrar); channel.setMethodCallHandler(instance); } @Override public void onMethodCall(MethodCall call, Result result) { String url = call.argument("url"); if (call.method.equals("getPlatformVersion")) { result.success("Android " + android.os.Build.VERSION.RELEASE); } else if (call.method.equals("openBrowser")) { openBrowser(call, result, url); } else { result.notImplemented(); } } private void openBrowser(MethodCall call, Result result, String url) { Activity activity = mRegistrar.activity(); 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); } } |
- برای آزمایش یک پلاگین جدید ، my_browser_plugin_test یک پروژه جدید ایجاد کنید.
- pubspec.yaml را باز کنید و my_browser را به عنوان وابستگی افزونه تنظیم کنید.
1 2 3 4 5 |
dependencies: flutter: sdk: flutter my_browser: path: ../my_browser |
Android Studio هشدار خواهد داد که pubspec.yaml به روز شده است همانطور که در هشدار Android studio package نشان داده شده در زیر آمده است –
بر روی گزینه Get dependencies کلیک کنید Android studio پکیج را از اینترنت دریافت کرده و آن را برای برنامه به درستی پیکربندی می کند.
main.dart را باز کنید و افزونه my_browser را مانند زیر import کنید –
1 |
import 'package:my_browser/my_browser.dart'; |
فانکشن openBrowser را از افزونه my_browser مانند شکل زیر فراخوانی کنید –
1 |
onPressed: () => MyBrowser().openBrowser("https://flutter.dev"), |
کد سورس کامل 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 |
import 'package:flutter/material.dart'; import 'package:my_browser/my_browser.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: () => MyBrowser().openBrowser("https://flutter.dev"), ), ), ); } } |
برنامه را اجرا کرده و روی دکمه Open Browser کلیک کنید و ببینید که مرورگر راه اندازی شده است. می توانید یک برنامه مرورگر را مشاهده کنید – صفحه اصلی همانطور که در تصویر نشان داده شده :
می توانید برنامه مرورگر را مشاهده کنید – صفحه مرورگر همانطور که در تصویر زیر نشان داده شده است –
دیدگاهتان را بنویسید