نماهای پلتفرم به شما امکان می دهد نماهای بومی را در یک برنامه Flutter جاسازی کنید ، بنابراین می توانید از DART از DART تبدیل ، کلیپ و کدورت را به نمای بومی اعمال کنید.
این به شما امکان می دهد ، به عنوان مثال ، از نقشه های بومی Google از Android SDK مستقیماً در داخل برنامه Flutter خود استفاده کنید.
توجه: این صفحه در مورد نحوه میزبانی نماهای بومی اندرویدی خود در یک برنامه Flutter بحث می کند. اگر می خواهید نماهای بومی iOS را در برنامه Flutter خود جاسازی کنید ، به میزبان نمای بومی iOS مراجعه کنید.
Flutter از دو حالت پشتیبانی می کند: ترکیب ترکیبی و نمایشگرهای مجازی.
از کدام یک بستگی به مورد استفاده دارد. بیا یک نگاهی بیندازیم:
- ترکیب ترکیبی Android. view. view را به سلسله مراتب نمایش اضافه می کند. بنابراین ، کنترل صفحه کلید و دسترسی به خارج از جعبه. قبل از Android 10 ، این حالت ممکن است به میزان قابل توجهی توان فریم (FPS) UI Flutter را کاهش دهد. برای زمینه بیشتر ، به عملکرد مراجعه کنید.
- نمایش های مجازی به عنوان مثال Android. view. view را به یک بافت ارائه می دهد ، بنابراین در سلسله مراتب نمایش فعالیت Android تعبیه نشده است. تعامل برخی از پلتفرم مانند کنترل صفحه کلید و ویژگی های دسترسی ممکن است کار نکند.
برای ایجاد نمای سکوی در Android ، از مراحل زیر استفاده کنید:
در سمت دارت
از طرف DART ، ویجت ایجاد کرده و یکی از پیاده سازی های ساخت زیر را اضافه کنید.
ترکیب ترکیبی
در پرونده DART خود ، به عنوان مثال native_view_example. dart ، از دستورالعمل های زیر استفاده کنید:
- واردات زیر را اضافه کنید:
بسته بندی "بسته بندی: flutter/foundation. dart" ؛بسته وارد کردن: Flutter/Gestures. Dart '؛بسته بندی "بسته بندی: flutter/material. dart" ؛بسته بندی "بسته بندی: flutter/render. dart" ؛واردات "بسته بندی: flutter/services. dart" ؛
ویجت ساخت (زمینه buildContext)؛Retu PlatformViewLink (ViewType: ViewType ، SurfaceFactory: (زمینه ، کنترل کننده)<>, hitTestBehavior: PlatformViewHitTestBehavior.opaque, );>، onCreatePlatFormView: (پارامترها), ) ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated) ..create();>, );>
برای اطلاعات بیشتر ، به اسناد API برای:
- PlatformViewLink
- AndroidViewSurface
- PlatformViewsService
نمایش مجازی
در پرونده DART خود ، به عنوان مثال native_view_example. dart ، از دستورالعمل های زیر استفاده کنید:
- واردات زیر را اضافه کنید:
بسته بندی "بسته بندی: flutter/material. dart" ؛واردات "بسته بندی: flutter/services. dart" ؛
ویجت ساخت (زمینه buildContext); retu AndroidView( viewType: viewType, layoutDirection: TextDirection.ltr, creationParams: creationParams, creationParamsCodec: const StandardMessageCodec(), );>
برای اطلاعات بیشتر ، به اسناد API برای:
در سمت سکو
از طرف پلتفرم ، از بسته استاندارد io. flutter. plugin. platform در java یا Kotlin استفاده کنید:
در کد بومی خود موارد زیر را پیاده سازی کنید:
گسترش io. flutter. plugin. platform. platformview برای ارائه مرجع به android. view. view (به عنوان مثال ، nativeview. kt):
بسته بندی کردن dev. flutter. example وارد كردن Android. Content. Context وارد كردن android. graphics. color وارد كردن android. widget. textView وارد كردن io. flutter. plugin. platform. platformview درونی؛ داخلی طبقه نمای بومی(متن نوشته: متن نوشته, id: در نظر گرفتن, پاراگرام های خلاقیت: نقشهرشته?, هیچ?>?) : PlatformView خصوصی دره نمایش متن: نمایش متن نادیده گرفتن سرگرم کردن نمایش(): چشم انداز برگشت نمایش متن > نادیده گرفتن سرگرم کردن در معرض قرار دادن() <> شروع کردن نمایش متن = نمایش متن(متن نوشته) نمایش متن.متون کردن = 72f نمایش متن.پیشگامان(رنگ.RGB(255, 255, 255)) نمایش متن.متن = "در نمای اندرویدی بومی (شناسه: $ شناسه) ارائه شده است" > >
یک کلاس کارخانه ایجاد کنید که نمونه ای از NativeView ایجاد شده در ابتدا ایجاد کند (به عنوان مثال ، NativeViewFactory. kt):
بسته بندی کردن dev. flutter. example وارد كردن Android. Content. Context وارد كردن android. view. view وارد كردن io. flutter. plugin. common. standardmessagecodec وارد كردن io. flutter. plugin. platform. platformview وارد كردن io. flutter. plugin. platform. platformviewfective طبقه بومی : PlatformViewFactory(استاندارد.نمونه، مثال) نادیده گرفتن سرگرم کردن ايجاد كردن(متن نوشته: متن نوشته, رعایت کردن: در نظر گرفتن, استدلال: هیچ?): PlatformView دره پاراگرام های خلاقیت = استدلال as نقشهرشته?, هیچ?>? برگشت نمای بومی(متن نوشته, رعایت کردن, پاراگرام های خلاقیت) > >
در آخر ، نمای پلتفرم را ثبت کنید. می توانید این کار را در یک برنامه یا یک افزونه انجام دهید.
برای ثبت نام برنامه ، فعالیت اصلی برنامه را اصلاح کنید (به عنوان مثال ، MainActivity. kt):
بسته بندی کردن dev. flutter. example وارد كردن io. flutter. embedding. android. flutteractivity وارد كردن io. flutter. embedding. engine. flutterengine طبقه فعالیت اصلی : شجاعانه() نادیده گرفتن سرگرم کردن پیکربندی Flutterengine(جبهه: جبهه) جبهه .PlatformViewsController .ثبت .ثبت نام("", بومی()) > >
برای ثبت نام افزونه ، کلاس اصلی افزونه را تغییر دهید (به عنوان مثال ، PlatformViewPlugin. kt):
بسته بندی کردن dev. flutter. plugin. example وارد كردن io. flutter. embedding. engine. plugins. flutterplugin وارد كردن io. flutter. embedding. engine. plugins. flutterplugin. flutterpluginbinding طبقه PlatformViewPlugin : فلوتروژین نادیده گرفتن سرگرم کردن onattachedtoengine(الزام آور: فلاترپلوژین) الزام آور .PlatformViewRegistry .ثبت نام("", بومی()) > نادیده گرفتن سرگرم کردن یدک(الزام آور: فلاترپلوژین) <> >
در کد بومی خود موارد زیر را پیاده سازی کنید:
io. flutter. plugin. platform. platformview را گسترش دهید تا مرجعی به android. view. view (به عنوان مثال ، nativeview. java) ارائه دهید:
بسته بندی کردن dev. flutter. example; وارد كردن Android. Content. Context; وارد كردن android. graphics. color; وارد كردن android. view. view; وارد كردن android. widget. textView; وارد كردن androidx. annotation. nonnull; وارد كردن androidx. annotation. Nullable; وارد كردن io. flutter. plugin. platform. platformview; وارد كردن java. util. map; طبقه نمای بومی لوازم جانبی PlatformView nonnull خصوصی نهایی نمایش متن نمایش متن; نمای بومی(nonnull متن نوشته متن نوشته, در نظر گرفتن id, nullable نقشهرشته, هدف - شی> پاراگرام های خلاقیت) نمایش متن = جدید نمایش متن(متن نوشته); نمایش متن.از روی(72); نمایش متن.پیشگامان(رنگ.RGB(255, 255, 255)); نمایش متن.متن("در نمای بومی اندرویدی ارائه شده است (شناسه:" + id + ")"); > nonnull Override عمومی چشم انداز نمایش() برگشت نمایش متن; > Override عمومی خالی در معرض قرار دادن() <> >
یک کلاس کارخانه ایجاد کنید که نمونه ای از NativeView ایجاد شده در ابتدا ایجاد کند (به عنوان مثال ، NativeViewFactory. java):
بسته بندی کردن dev. flutter. example; وارد كردن Android. Content. Context; وارد كردن androidx. annotation. Nullable; وارد كردن androidx. annotation. nonnull; وارد كردن io. flutter. plugin. common. standardmessagecodec; وارد كردن io. flutter. plugin. platform. platformview; وارد كردن io. flutter. plugin. platform. platformviewfective; وارد كردن java. util. map; طبقه بومی تمدید کردن PlatformViewFactory بومی() فوق العاده(استاندارد.نمونه، مثال); > nonnull Override عمومی PlatformView ايجاد كردن(nonnull متن نوشته متن نوشته, در نظر گرفتن id, nullable هدف - شی استدلال) نهایی نقشهرشته, هدف - شی> پاراگرام های خلاقیت = (نقشهرشته, هدف - شی>) استدلال; برگشت جدید نمای بومی(متن نوشته, id, پاراگرام های خلاقیت); > >
در آخر ، نمای پلتفرم را ثبت کنید. می توانید این کار را در یک برنامه یا یک افزونه انجام دهید.
برای ثبت نام برنامه ، فعالیت اصلی برنامه را اصلاح کنید (به عنوان مثال ، mainActivity. java):
بسته بندی کردن dev. flutter. example; وارد كردن androidx. annotation. nonnull; وارد كردن io. flutter. embedding. android. flutteractivity; وارد كردن io. flutter. embedding. engine. flutterengine; عمومی طبقه فعالیت اصلی تمدید کردن شجاعانه Override عمومی خالی پیکربندی Flutterengine(nonnull جبهه جبهه) جبهه .getPlatFormViewsController() .رجیستری() .ثبت نام("", جدید بومی()); > >
برای ثبت افزونه ، پرونده اصلی افزونه (به عنوان مثال ، PlatformViewPlugin. java) را اصلاح کنید:
بسته بندی کردن dev. flutter. plugin. example; وارد كردن androidx. annotation. nonnull; وارد كردن io. flutter. embedding. engine. plugins. flutterplugin; عمومی طبقه PlatformViewPlugin لوازم جانبی فلوتروژین Override عمومی خالی onattachedtoengine(nonnull فلاترپلوژین الزام آور) الزام آور .getPlatFormViewRegistry() .ثبت نام("", جدید بومی()); > Override عمومی خالی یدک(nonnull فلاترپلوژین الزام آور) <> >
برای اطلاعات بیشتر ، به اسناد API برای:
- فلوتروژین
- PlatformViewRegistry
- PlatformViewFactory
- PlatformView
در آخر ، فایل build. gradle خود را اصلاح کنید تا به یکی از حداقل نسخه های Android SDK نیاز داشته باشید:
اندروید پیش فرض مینزدون 19 // در صورت استفاده از ترکیب ترکیبی مینزدون 20 // در صورت استفاده از صفحه نمایش مجازی. > >
کارایی
نماهای پلتفرم در Flutter با معاملات عملکردی همراه است.
به عنوان مثال ، در یک برنامه معمولی Flutter ، UI Flutter بر روی یک موضوع شطرنجی اختصاصی تشکیل شده است. این اجازه می دهد تا برنامه های Flutter سریع باشند ، زیرا موضوع اصلی پلتفرم به ندرت مسدود می شود.
در حالی که نمای سکوی با ترکیب ترکیبی ارائه می شود ، UI Flutter از موضوع پلتفرم تشکیل شده است ، که با کارهای دیگر مانند دست زدن به سیستم های سیستم عامل یا پلاگین رقابت می کند.
قبل از Android 10 ، ترکیب هیبریدی هر قاب فلاتر را از حافظه گرافیکی در حافظه اصلی کپی کرده و سپس آن را به یک بافت GPU کپی کرد. از آنجا که این نسخه در هر فریم اتفاق می افتد ، ممکن است عملکرد کل UI Flutter تأثیر بگذارد. در اندروید 10 یا بالاتر ، حافظه گرافیکی فقط یک بار کپی می شود.
از طرف دیگر ، صفحه نمایش مجازی باعث می شود هر پیکسل از نمای بومی از طریق بافرهای گرافیکی متوسط اضافی جریان یابد ، که هزینه حافظه گرافیکی و عملکرد را ترسیم می کند.
برای موارد پیچیده ، برخی از تکنیک ها وجود دارد که می تواند برای کاهش این مسائل استفاده شود.
به عنوان مثال ، شما می توانید از یک بافت مکان نگهدارنده استفاده کنید در حالی که یک انیمیشن در دارت اتفاق می افتد. به عبارت دیگر ، اگر یک انیمیشن کند باشد در حالی که نمای پلتفرم ارائه می شود ، پس از آن یک تصویر از نمای بومی را در نظر بگیرید و آن را به عنوان یک بافت ارائه دهید.
برای اطلاعات بیشتر ببین:
- متقلب
- تنیس
- fluttertextureregistry
- چشم انداز
- مقررات
- استفاده از برند
- امنیت
- حریم خصوصی
- لاتول
- 社区 中文 资源
- ما در همبستگی با جامعه سیاه ایستاده ایم. زندگی سیاه زندگی.
به جز آنچه در غیر این صورت ذکر شد ، این کار تحت مجوز بین المللی Creative Commons Attribution 4. 0 مجوز دارد و نمونه های کد تحت مجوز BSD مجوز دارند.
استراتژی برای تجارت گزینه های...
ما را در سایت استراتژی برای تجارت گزینه های دنبال می کنید
برچسب :
نویسنده : فریبا کامران
بازدید : 32
تاريخ : پنجشنبه
26 مرداد
1402 ساعت: 15:38