RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Flutter 2.8 閃亮登場(chǎng)

谷歌開(kāi)發(fā)者 ? 來(lái)源:Flutter ? 作者:Flutter ? 2022-01-03 09:12 ? 次閱讀

作者 / Chris Sells, Flutter 開(kāi)發(fā)者體驗(yàn)產(chǎn)品經(jīng)理

又到了北半球每年的這個(gè)時(shí)節(jié): 樹葉變黃、氣溫下降,而今年的最終穩(wěn)定版本也在此時(shí)發(fā)布: Flutter 2.8 閃亮登場(chǎng)!這個(gè)版本凝聚了 207 位貢獻(xiàn)者和 178 位審閱者的辛勤付出,合并了 2,424 個(gè) PR,并解決了 2,976 個(gè)問(wèn)題。在這里,我們要特別感謝此版本的杰出社區(qū)貢獻(xiàn)者 Bartosz Selwesiuk,作為 Very Good Ventures 的 Flutter 工程師,他提供了 23 個(gè) PR,其中大部分主要 "專注于"(原文如此) 面向 Web 的攝像頭插件。

所有人的通力合作給引擎和 Flutter DevTools 帶來(lái)了顯著的性能改進(jìn)、穩(wěn)定的 Google Mobile Ads SDK for Flutter 版本、一系列全新的 Firebase 功能和改進(jìn)、WebView 3.0、一批新的 Flutter Favorite package、朝著穩(wěn)定版桌面端支持更進(jìn)一步的大量更新,以及支持更多 package (包括 Firebase) 的新版本 DartPad。這應(yīng)該是今年發(fā)布的最后一個(gè)版本,相信不負(fù)大家的期待。我們一起走進(jìn) Flutter 2.8!

性能

一如往常,F(xiàn)lutter 的第一要?jiǎng)?wù)是質(zhì)量。我們的絕大部分工作旨在確保 Flutter 在其支持的設(shè)備上盡可能順暢和穩(wěn)健地運(yùn)行。

啟動(dòng)

此版本對(duì)應(yīng)用啟動(dòng)延遲進(jìn)行了改進(jìn)。我們通過(guò) Google Pay 對(duì)這些改進(jìn)進(jìn)行了測(cè)試。作為一個(gè)熱門的大型應(yīng)用,Google Pay 擁有超過(guò) 100 萬(wàn)行代碼,可以確保這些改進(jìn)能夠在現(xiàn)實(shí)環(huán)境中產(chǎn)生顯著的積極影響。所有相關(guān)改進(jìn)使 Google Pay 在低端 Android 設(shè)備上運(yùn)行時(shí)的啟動(dòng)延遲降低了 50%,在高端設(shè)備上降低了 10%。

對(duì)于 Flutter 影響 Dart VM 垃圾回收策略機(jī)制的改進(jìn),現(xiàn)在有助于避免在應(yīng)用啟動(dòng)序列中出現(xiàn)錯(cuò)誤的垃圾回收 (GC) 周期。例如,在 Android 上渲染第一幀之前,F(xiàn)lutter 現(xiàn)在只通知 Dart VM "TRIM_LEVEL_RUNNING_CRITICAL" 及以上的內(nèi)存壓力。在本地測(cè)試中,此改進(jìn)將低端設(shè)備上的第一幀時(shí)間減少了多達(dá) 300 毫秒。

#90551: 只通知 Dart VM "TRIM_LEVEL_RUNNING_CRITICAL" 及以上的內(nèi)存壓力 https://github.com/flutter/flutter/issues/90551

出于謹(jǐn)慎考慮,在之前的版本中,F(xiàn)lutter 在創(chuàng)建平臺(tái)視圖時(shí)會(huì)阻塞平臺(tái)線程。經(jīng)過(guò)仔細(xì)推敲和測(cè)試,我們確定可以移除一些序列化操作,這使得在低端設(shè)備上啟動(dòng) Google Pay 時(shí)減少了超過(guò) 100 毫秒的阻塞。

#29145: 在 UI/Raster 線程上不要對(duì) Shell::OnCreatePlatformView 進(jìn)行序列化操作 https://github.com/flutter/engine/pull/29145#pullrequestreview-778935616

#91711: UI 線程上的 Shell::OnPlatformViewCreated 不應(yīng)進(jìn)行序列化 https://github.com/flutter/flutter/issues/91711

以前,設(shè)置默認(rèn)字體管理器會(huì)在設(shè)置第一個(gè) Dart Isolate 時(shí)引入人為延遲。延遲默認(rèn)字體管理器設(shè)置,使其與 Dart Isolate 設(shè)置同時(shí)運(yùn)行,既改善了啟動(dòng)延遲時(shí)間,又使得上述優(yōu)化的效果更加明顯,因?yàn)橹饕钠款i就在這里。

#29291: 延遲默認(rèn)字體管理器,使其與 Isolate 設(shè)置同時(shí)運(yùn)行

https://github.com/flutter/engine/pull/29291

內(nèi)存 由于 Flutter 會(huì)急切地加載 Dart VM 的 "Service Isolate",其 AOT 代碼與應(yīng)用捆綁在一起,以便 Flutter 可以同時(shí)將兩者讀入內(nèi)存,因此以內(nèi)存受限設(shè)備為目標(biāo)平臺(tái)的 Flutter 開(kāi)發(fā)者在進(jìn)行性能跟蹤時(shí)遇到了問(wèn)題。對(duì)于使用 2.8 版本的 Android 設(shè)備,Dart VM 的 Service Isolate 會(huì)被分離到自己的軟件包內(nèi),可單獨(dú)加載,因此在需要使用 Service Isolate 之前,可以節(jié)省多達(dá) 40 MB 的內(nèi)存。Dart VM 會(huì)通知操作系統(tǒng),AOT 程序使用的內(nèi)存分頁(yè)被備份到了一個(gè)可能無(wú)需再次讀取的文件里,這使得內(nèi)存占用量進(jìn)一步減少達(dá) 10%。因此,之前用于保存文件備份數(shù)據(jù)副本的分頁(yè)可以被回收,并用于其他用途。

#91382: 引擎不應(yīng)使用應(yīng)用快照加載 VM 服務(wù) https://github.com/flutter/flutter/issues/91382

#29245: 構(gòu)建一個(gè)用于在 Android 分析模式啟動(dòng) Service Isolate 的專用快照 https://github.com/flutter/engine/pull/29245

#92120: 為提供給 Dart VM 的類型映射提供提示 https://github.com/flutter/flutter/issues/92120

性能分析 有時(shí),開(kāi)發(fā)者希望能夠同時(shí)查看來(lái)自 Flutter 的性能跟蹤數(shù)據(jù)以及 Android 原生跟蹤事件。此外,他們也會(huì)希望能查看以發(fā)布模式構(gòu)建的應(yīng)用中的跟蹤事件,以便深入了解所部署的應(yīng)用中的性能問(wèn)題。為此,2.8 穩(wěn)定版現(xiàn)在會(huì)將跟蹤事件發(fā)送到 Android systrace 記錄器 (如果其已在應(yīng)用啟動(dòng)時(shí)啟用),同時(shí),即使 Flutter 應(yīng)用在發(fā)布模式下構(gòu)建,這些事件也會(huì)發(fā)送出來(lái)。 △ Flutter 跟蹤事件現(xiàn)在顯示在 Android systrace 記錄工具中 (見(jiàn)底端)

#28903: 如在應(yīng)用啟動(dòng)時(shí)啟用 systrace,則使用 systrace 記錄器,并在 Android 發(fā)布模式下啟用 systrace https://github.com/flutter/engine/pull/28903

此外,為了創(chuàng)建卡頓更少的動(dòng)畫,一些開(kāi)發(fā)者希望性能跟蹤記錄中包含更多關(guān)于光柵緩存行為的信息,這使得 Flutter 能夠?qū)Π嘿F和重復(fù)使用的圖片進(jìn)行圖塊搬移,無(wú)需在每一幀上重新進(jìn)行繪制。性能跟蹤記錄中的新流程事件現(xiàn)在允許開(kāi)發(fā)者跟蹤光柵緩存圖片的生命周期。

#92286: 為光柵緩存的生成至刪除事件添加流程或異步事件 https://github.com/flutter/flutter/issues/92286

Flutter DevTools 在調(diào)試性能問(wèn)題方面,此版本的 DevTools 添加了新的 "增強(qiáng)跟蹤 (Enhance Tracing)" 功能,以幫助用戶診斷由成本高昂的構(gòu)建、布局和繪制操作引起的界面卡頓。

#3451:在性能頁(yè)面增加跟蹤繪制和跟蹤布局開(kāi)關(guān) https://github.com/flutter/devtools/pull/3451

啟用任一跟蹤功能時(shí),時(shí)間軸將根據(jù)選項(xiàng)相應(yīng)地包含新的 "已構(gòu)建 widget"、"已布局渲染對(duì)象" 和 "已繪制渲染對(duì)象" 事件。

另外,此版本的 DevTools 添加了新功能來(lái)分析應(yīng)用啟動(dòng)時(shí)的性能表現(xiàn)。此剖析文件包含從 Dart VM 初始化到第一個(gè) Flutter 幀渲染完成的所有 CPU 采樣。在點(diǎn)擊 "剖析應(yīng)用啟動(dòng) (Profile app starup)" 按鈕并加載應(yīng)用啟動(dòng)剖析文件后,您將看到剖析文件的 "AppStartUp" 用戶標(biāo)簽已被選中。您還可以通過(guò)在列表中選擇這個(gè)用戶標(biāo)簽過(guò)濾器 (如果可用),來(lái)加載應(yīng)用啟動(dòng)剖析文件。選擇此標(biāo)簽會(huì)顯示您應(yīng)用啟動(dòng)的剖析數(shù)據(jù)。

#3357: 增加應(yīng)用啟動(dòng)剖析功能,以及改進(jìn) CPU 剖析緩存 https://github.com/flutter/devtools/pull/3357

Web 版平臺(tái)視圖 并不是僅有 Android 和 iOS 平臺(tái)的性能得到了改進(jìn),此版本還改進(jìn)了 Web 版 Flutter 平臺(tái)視圖的性能。如果您不熟悉平臺(tái)視圖,這里簡(jiǎn)單介紹一下: 它是 Flutter 供您托管來(lái)自應(yīng)用底層平臺(tái)的原生界面組件的方式。Web 版 Flutter 使用 HtmlElementView widget 實(shí)現(xiàn)這一功能,用于在 Flutter web 應(yīng)用中托管 HTML 元素。如果您正在使用 google_maps_flutter 或 video_player 插件的 Web 版本,或者您正在遵循 Flutter 團(tuán)隊(duì)關(guān)于如何在 Web 平臺(tái)優(yōu)化顯示圖像的建議,那么您就是在使用平臺(tái)視圖。

HtmlElementView https://api.flutter.cn/flutter/widgets/HtmlElementView-class.html

在 Web 中展示圖片 https://flutter.cn/docs/development/platform-integration/web-images#use-img-in-a-platform-view

在 Flutter 之前的版本中,嵌入平臺(tái)視圖會(huì)立即構(gòu)建一個(gè)新的 canvas,每增加一個(gè)平臺(tái)視圖,都會(huì)添加一個(gè)新的 canvas。這些額外生成的 canvas 成本高昂,因?yàn)槊總€(gè) canvas 都是整個(gè)窗口的大小。而在新版本中,我們復(fù)用了為之前的平臺(tái)視圖創(chuàng)建的 canvas,因此相比較之前每秒承擔(dān) 60 倍的成本,如今在整個(gè)應(yīng)用的生命周期內(nèi)只需要承擔(dān)一次成本即可。這意味著您可以在 Web 應(yīng)用中創(chuàng)建多個(gè) HtmlElementView 而不損失性能,同時(shí)可減少使用平臺(tái)視圖時(shí)的滾動(dòng)卡頓。

#28087: 優(yōu)化特殊用例下的 CanvasKit 平臺(tái)視圖 https://github.com/flutter/engine/pull/28087

生態(tài)系統(tǒng)

Flutter 不僅僅是框架、引擎和工具: pub.dev 上有超過(guò) 20,000 個(gè)與 Flutter 兼容的 package 和插件,而且每天還在不斷產(chǎn)生更多的內(nèi)容。Flutter 開(kāi)發(fā)者日常大量互動(dòng)的內(nèi)容構(gòu)成了一個(gè)更為龐大的生態(tài)系統(tǒng),讓我們一起來(lái)看看自上個(gè)版本以來(lái) Flutter 生態(tài)系統(tǒng)的發(fā)展吧。

Flutter Ads 正式發(fā)布

首先,也是最重要的是,Google Mobile Ads SDK for Flutter 已正式發(fā)布。

此版本支持 5 種廣告格式,集成了 AdMob 和 Ad Manager 支持,并包含新中介功能的測(cè)試版,可幫助您優(yōu)化廣告效果。有關(guān)將 Google Ads 集成到 Flutter 應(yīng)用以及其他獲利方案的更多信息,請(qǐng)查看有關(guān)獲利的詳細(xì)信息:

https://flutter.cn/monetization

WebView 3.0

這次 Flutter 還帶來(lái)了 webview_flutter 插件的 3.0 版本:

https://pub.flutter-io.cn/packages/webview_flutter

因?yàn)樾鹿δ軘?shù)量眾多,以及 Web 視圖在 Android 上運(yùn)行時(shí)會(huì)出現(xiàn)潛在的重大變更,我們提高了版本號(hào)。在 webview_flutter 的上一版本中,我們已提供混合集成模式,但沒(méi)有將其設(shè)為默認(rèn)。混合集成修復(fù)了原先默認(rèn)虛擬顯示模式存在的若干問(wèn)題?;谟脩舴答伜臀覀兊膯?wèn)題追蹤,我們認(rèn)為是時(shí)候讓混合集成變成默認(rèn)模式了。此外,webview_flutter 也增加了若干呼聲很高的功能:

支持使用 POST 和 GET 填充內(nèi)容 (#4450、#4479、#4480、#4573)

https://github.com/flutter/plugins/pull/4450

https://github.com/flutter/plugins/pull/4479

https://github.com/flutter/plugins/pull/4480

https://github.com/flutter/plugins/pull/4573

從文件和字符串加載 HTML (#4446、#4486、#4544、#4558)

https://github.com/flutter/plugins/pull/4446

https://github.com/flutter/plugins/pull/4486

https://github.com/flutter/plugins/pull/4544

https://github.com/flutter/plugins/pull/4558

透明背景支持 (#3431、#4569、#4570)

https://github.com/flutter/plugins/pull/3431

https://github.com/flutter/plugins/pull/4569

https://github.com/flutter/plugins/pull/4570

在加載內(nèi)容前寫入 Cookie (#4555、#4556、#4557)

https://github.com/flutter/plugins/pull/4555

https://github.com/flutter/plugins/pull/4556

https://github.com/flutter/plugins/pull/4557

而且在 3.0 版本中,webview_flutter 還新增了對(duì) Web 平臺(tái)的初步支持。有許多人希望能在 Flutter Web 應(yīng)用中托管 WebView,這可讓他們通過(guò)單個(gè)源代碼庫(kù)來(lái)構(gòu)建移動(dòng)或 Web 應(yīng)用。那如何在 Flutter Web 應(yīng)用中托管 WebView 呢?代碼如下:

import 'package:flutter/foundation.dart';import 'package:flutter/material.dart';import 'package:webview_flutter/webview_flutter.dart';import 'package:webview_flutter_web/webview_flutter_web.dart';
void main() {  runApp(const MaterialApp(home: HomePage()));}
class HomePage extends StatefulWidget {  const HomePage({Key? key}) : super(key: key);
  @override  State createState() => _HomePageState();}
class _HomePageState extends State {  @override  void initState() {    super.initState();
    // required while web support is in preview    if (kIsWeb) WebView.platform = WebWebViewPlatform();  }
  @override  Widget build(BuildContext context) => Scaffold(        appBar: AppBar(title: const Text('Flutter WebView example')),        body: const WebView(initialUrl: 'https://flutter.dev'),      );}

它在 Web 上運(yùn)行時(shí)的效果也正如您預(yù)期的那樣:

注意,當(dāng)前 Web 端 webview_flutter 的實(shí)現(xiàn)有許多限制,因?yàn)樗墙柚?iframe 構(gòu)建的,而 iframe 只能支持簡(jiǎn)單的網(wǎng)址加載,無(wú)法控制加載的內(nèi)容或與其交互 (更多詳細(xì)信息見(jiàn) webview_flutter_web README)。但是,應(yīng)大家需求,我們將提供 webview_flutter_web,作為未整合的插件供大家使用。如果您想一試,請(qǐng)將以下代碼行添加到您的 pubspec.yaml 中:

dependencies:  webview_flutter: ^3.0.0  webview_flutter_web: ^0.1.0 # add unendorsed plugin explicitly

Webview_flutter_web README https://pub.flutter-io.cn/packages/webview_flutter_web

未整合的聯(lián)合插件 https://flutter.cn/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin

如果您對(duì) webview_flutter v3.0 有任何反饋,無(wú)論是否基于 Web 端,請(qǐng)將其作為 WebView 問(wèn)題提交至 Flutter repo。此外,如果您之前沒(méi)有使用過(guò) WebView 或想回顧一下其用法,請(qǐng)查看全新的 WebView Codelab,它會(huì)向您逐步介紹在 Flutter 應(yīng)用中托管 Web 內(nèi)容的過(guò)程。

提交問(wèn)題 https://github.com/flutter/flutter/issues

WebView Codelab https://codelabs.developers.google.com/codelabs/flutter-webview

Flutter Favorites Flutter 生態(tài)系統(tǒng)委員會(huì)再次舉行會(huì)議,并將以下內(nèi)容指定為 Flutter Favorite package:

https://flutter.cn/docs/development/packages-and-plugins/favorites#flutter-ecosystem--committee

新 Router API 的三個(gè)自定義路由 package: beamer、routemaster 和 go_router

https://pub.flutter-io.cn/packages/beamer

https://pub.flutter-io.cn/packages/routemaster

https://pub.flutter-io.cn/packages/go_router

drift,重命名自 Flutter 和 Dart 中的一個(gè)已經(jīng)可用且頗為流行的反應(yīng)式持久性庫(kù),它建立于 sqlite 之上:

https://pub.flutter-io.cn/packages/drift

https://pub.flutter-io.cn/packages/sqlite3

freezed 是一個(gè) Dart 的 "語(yǔ)言補(bǔ)丁",為定義模型、克隆對(duì)象、模式匹配等提供簡(jiǎn)單的語(yǔ)法

https://pub.flutter-io.cn/packages/freezed

dart_code_metrics

https://pub.flutter-io.cn/packages/dart_code_metrics

此外還有幾個(gè)好用的圖形用戶界面 package: flex_color_scheme、flutter_svg、feedback、toggle_switch 和 auto_size_text

https://pub.flutter-io.cn/packages/flex_color_scheme

https://pub.flutter-io.cn/packages/flutter_svg

https://pub.flutter-io.cn/packages/feedback

https://pub.flutter-io.cn/packages/toggle_switch

https://pub.flutter-io.cn/packages/auto_size_text

△ Flexfold 應(yīng)用就使用了 flex_color_scheme

祝賀這些 package 的作者,感謝您用自己的辛勤努力支持 Flutter 社區(qū)。如果您想要提名最喜歡的 Flutter package 來(lái)獲得 Flutter Favorite 獎(jiǎng)項(xiàng),請(qǐng)遵循 Flutter Favorite 計(jì)劃頁(yè)面上的指南和說(shuō)明:

https://flutter.cn/docs/development/packages-and-plugins/favorites

特定平臺(tái)的 package 如果您是 package 作者,您必須確定自己準(zhǔn)備支持哪些平臺(tái)。如果您要用特定平臺(tái)的原生代碼來(lái)構(gòu)建插件,您可以在項(xiàng)目的 pubspec.yaml 中使用 pluginClass 屬性,用來(lái)表示提供該功能的原生類:

https://flutter.cn/docs/development/packages-and-plugins/developing-packages#plugin-platforms

flutter:  plugin:    platforms:      android:        package: com.example.hello        pluginClass: HelloPlugin      ios:        pluginClass: HelloPlugin

然而,隨著 Dart FFI 越來(lái)越成熟,您也有可能完全在 Dart 中實(shí)現(xiàn)特定平臺(tái)的功能,就像 path_provider_windows package 那樣。在這種情況下,沒(méi)有任何原生類可以使用,但您仍然需要指定 package 只支持某些平臺(tái),您可以使用 dartPluginClass 屬性代替:

flutter:  plugin:    implements: hello    platforms:      windows:        dartPluginClass: HelloPluginWindows

Dart FFI https://dart.dev/guides/libraries/c-interop

path_provider_windows https://pub.flutter-io.cn/packages/path_provider_windows

有了這個(gè)設(shè)置,在沒(méi)有任何原生代碼的情況下,您也可以把 package 設(shè)置成只支持某些特定平臺(tái)。您還必須提供 Dart 插件類,您可以通過(guò)僅 Dart 的平臺(tái)實(shí)現(xiàn)官方文檔中了解詳情:

https://flutter.cn/docs/development/packages-and-plugins/developing-packages#dart-only-platform-implementations

Firebase Flutter 生態(tài)系統(tǒng)的另一個(gè)重要部分是 FlutterFire,有 2/3 的 Flutter 應(yīng)用在使用它。這個(gè)版本帶來(lái)了一系列新功能,讓使用 Flutter 和 Firebase 構(gòu)建應(yīng)用變得更加輕松:

所有 FlutterFire 插件已從 Beta 版過(guò)渡到穩(wěn)定版

Dartpad 中增加了對(duì)若干 Firebase 服務(wù)的支持

用于更輕松構(gòu)建身份驗(yàn)證和實(shí)時(shí) Firestore 查詢界面的庫(kù)

針對(duì) Flutter 的新 Firestore 對(duì)象/文檔映射 (Alpha 版)

生產(chǎn)質(zhì)量 FlutterFire 插件已經(jīng)基本從 Beta 版轉(zhuǎn)換至穩(wěn)定版:

http://firebase.flutter.dev/

Android、iOS 和 Web 平臺(tái)中已經(jīng)穩(wěn)定的插件包括 Analytics、Dynamic Links、In-App Messaging、Performance Monitoring、Realtime Database、Remote Config 以及新增的 Installations。App Check 插件和 macOS 平臺(tái)支持仍處于 Beta 版,因?yàn)?Firebase 庫(kù)本身也處于 Beta 版階段。如果您因?yàn)?FlutterFire 庫(kù)還未就緒而猶豫是否要選擇 Realtime Database、Analytics 或 Remote Config,那么請(qǐng)不用再擔(dān)心了?,F(xiàn)在它們已經(jīng)是完全受支持的插件,可供生產(chǎn)使用。

Analytics https://firebase.flutter.dev/docs/analytics/overview

Dynamic Links https://firebase.flutter.dev/docs/dynamic-links/overview

In-App Messaging https://firebase.flutter.dev/docs/in-app-messaging/overview/

Performance Monitoring https://firebase.flutter.dev/docs/performance/overview

Realtime Database https://firebase.flutter.dev/docs/database/overview

Remote Config https://firebase.flutter.dev/docs/remote-config/overview

Installations https://firebase.flutter.dev/docs/installations/overview

僅使用 Dart 初始化 Firebase 隨著 package 轉(zhuǎn)向生產(chǎn)質(zhì)量,我們?cè)黾恿送ㄟ^(guò) Dart 在任何受支持平臺(tái)上初始化 Firebase 的功能:

https://github.com/FirebaseExtended/flutterfire/pull/6549

import 'package:firebase_core/firebase_core.dart';import 'firebase_options.dart'; // generated via `flutterfire` CLI
Future main() async {  // initialize firebase across all supported platforms  WidgetsFlutterBinding.ensureInitialized();  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
  runApp(MyApp());}

上面的代碼使用適合每個(gè)受支持平臺(tái)的選項(xiàng)初始化 Firebase 應(yīng)用,這些選項(xiàng)在 firebase_options.dart 文件中定義,該文件包含每個(gè)平臺(tái)的數(shù)據(jù)結(jié)構(gòu),如下所示:

static const FirebaseOptions web = FirebaseOptions(  apiKey: 'AIzaSyCZFKryCEiKhD0JMPeq_weJguspf09h7Cg',  appId: '1web:b9195888086158195ffed1',  messagingSenderId: '111079797892',  projectId: 'flutterfire-fun',  authDomain: 'flutterfire-fun.firebaseapp.com',  storageBucket: 'flutterfire-fun.appspot.com',  measurementId: 'G-K029Y6KJDX',);

要收集每個(gè)平臺(tái)初始化選項(xiàng)數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù),請(qǐng)使用新的 flutterfire CLI 工具:

https://pub.flutter-io.cn/packages/flutterfire_cli

此工具會(huì)深入挖掘平臺(tái)特定子文件夾中的數(shù)據(jù),以找到唯一的軟件包 ID,然后用它來(lái)查找匹配平臺(tái)特定應(yīng)用的 Firebase 項(xiàng)目特定詳細(xì)信息,如果沒(méi)有查找到的話,甚至還會(huì)創(chuàng)建一個(gè)新的 Firebase 項(xiàng)目和/或新的平臺(tái)特定應(yīng)用。這意味著,您不再需要下載 json 文件并將其添加到 Android 項(xiàng)目、或下載 plist 文件并將其添加到 iOS 和 macOS 項(xiàng)目,或?qū)⒋a粘貼到您 Web 項(xiàng)目的 index.html 中: 無(wú)論您的 Firebase 項(xiàng)目支持哪個(gè)平臺(tái),這段 Dart 代碼都將為您的應(yīng)用完成Firebase 的初始化。請(qǐng)注意,要讓 FlutterFire 應(yīng)用正常工作,需要的初始化工作可能不止于此,例如,您可能需要將 Crashlytics 符號(hào)的創(chuàng)建集成到您的 Android 構(gòu)建或 iOS 構(gòu)建中,但在一個(gè)新的 Firebase 項(xiàng)目中,這些操作應(yīng)該只需要幾分鐘就可以完成并順利運(yùn)行。

#7359: 自動(dòng)注入 Firebase JS SDK https://github.com/FirebaseExtended/flutterfire/pull/7359

將 Crashlytics 插件添加至應(yīng)用 https://firebase.google.com/docs/crashlytics/get-started?platform=android#add-plugin

設(shè)置 Xcode 以自動(dòng)上傳 dSYM 文件 https://firebase.google.com/docs/crashlytics/get-started?platform=ios#set-up-dsym-uploading

在 DartPad 里使用 Firebase 借助僅使用 Dart 初始化 FlutterFire 的功能,您現(xiàn)在可以在 DartPad 中使用 Firebase。

上圖的示例使用 Flutter、Firebase 和 DartPad (都是無(wú)需安裝即可使用) 構(gòu)建了一個(gè)小型聊天應(yīng)用。如今,DartPad 的 Firebase 支持已包含核心 API、身份驗(yàn)證和 Firestore。將來(lái)會(huì)有更多 Firebase 服務(wù)出現(xiàn)在 DartPad 中。

Dart 聊天應(yīng)用示例 https://dartpad.dev/?id=d57c6c898dabb8c6fb41018588b8cf73

原作者動(dòng)態(tài) https://twitter.com/puf/status/1458516522133909506

DartPad 的 FlutterFire 支持還包含在文檔中直接嵌入 DartPad 實(shí)例的功能:

https://firebase.flutter.dev/docs/firestore/example/

在上面的示例中,您可以看到 Cloud Firestore 的文檔和示例應(yīng)用的代碼,您可以直接在瀏覽器中運(yùn)行和編輯這些代碼,而無(wú)需安裝內(nèi)容、創(chuàng)建測(cè)試項(xiàng)目,甚至不需要復(fù)制/粘貼代碼。代碼已經(jīng)在頁(yè)面中就緒,可以立即使用。

示例應(yīng)用 https://github.com/FirebaseExtended/flutterfire/tree/master/packages/cloud_firestore/cloud_firestore/example

Firebase 界面 我們注意到,當(dāng)人們將 Firebase 集成到他們的應(yīng)用中時(shí),大多數(shù)應(yīng)用都有某種身份驗(yàn)證流程。其中包括讓人們通過(guò)電子郵件地址和密碼或社交身份驗(yàn)證服務(wù) (例如 Google 提供的服務(wù)) 登錄。Firebase 身份驗(yàn)證還允許實(shí)時(shí)創(chuàng)建新帳號(hào)、驗(yàn)證電子郵件地址和重置密碼,以及支持需要使用短信進(jìn)行的兩步驗(yàn)證、用電話號(hào)碼登錄,甚至能將多個(gè)用戶帳號(hào)合并為一個(gè)帳號(hào)。Firebase 身份驗(yàn)證支持以上所有的功能,而 Flutter 開(kāi)發(fā)者以前是需要負(fù)責(zé)為這些功能實(shí)現(xiàn)相應(yīng)界面的。但從今以后就不用了。 現(xiàn)在,我們很高興地推出 flutterfire_ui package,通過(guò)它即可使用少量代碼創(chuàng)建基本的身份驗(yàn)證體驗(yàn)。例如,假設(shè)您在 Firebase 項(xiàng)目中設(shè)置了電子郵件和 Google 身份驗(yàn)證:

flutterfire_ui https://pub.flutter-io.cn/packages/flutterfire_ui

有了這個(gè)配置,您就可以使用如下代碼觸發(fā)身份驗(yàn)證流程:

import 'package:flutter/material.dart';import 'package:firebase_core/firebase_core.dart';import 'package:firebase_auth/firebase_auth.dart';import 'package:flutterfire_ui/auth.dart';import 'firebase_options.dart';
Future main() async {  WidgetsFlutterBinding.ensureInitialized();  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);  runApp(MyApp());}
class MyApp extends StatelessWidget {  const MyApp({Key? key}) : super(key: key);
  @override  Widget build(BuildContext context) => MaterialApp(        home: AuthenticationGate(),      );}
class AuthenticationGate extends StatelessWidget {  const AuthenticationGate({Key? key}) : super(key: key);
  @override  Widget build(BuildContext context) => StreamBuilder(        stream: FirebaseAuth.instance.authStateChanges(),        builder: (context, snapshot) {          // User is not signed in - show a sign-in screen          if (!snapshot.hasData) {            return SignInScreen(              providerConfigs: [                EmailProviderConfiguration(),                GoogleProviderConfiguration(                  clientId: 'xxxx-xxxx.apps.googleusercontent.com',                ),              ],            );          }
          return HomePage(); // show your app’s home page after login        },      );}

在這段代碼中,我們初始化了 Firebase,由于用戶尚未登錄,因此顯示登錄屏幕。SigninScreen widget 配置了電子郵件登錄和 Google 身份驗(yàn)證登錄。我們還使用 firebase_auth package 監(jiān)聽(tīng)用戶的身份驗(yàn)證狀態(tài),一旦他們完成登錄,我們就可以顯示應(yīng)用的其余部分。使用上面這段代碼,您就可以為所有支持 Firebase 的平臺(tái) (Android、iOS、Web 和 macOS) 提供可用的登錄流程。

只需增加一些配置,即可輕松添加圖像和自定義文本 (詳細(xì)信息見(jiàn)文檔),從而構(gòu)建出功能齊備的登錄體驗(yàn):

https://firebase.flutter.dev/docs/ui/overview

上面是移動(dòng)版本的截圖,但由于 flutterfire_ui 屏幕是響應(yīng)式的,以下即為桌面設(shè)備上的界面:

如果用戶已經(jīng)使用電子郵件/密碼注冊(cè)過(guò)賬號(hào),那他們可以立即登錄。如果他們使用 Google 身份驗(yàn)證,無(wú)論是在移動(dòng)設(shè)備、Web 還是桌面設(shè)備上,系統(tǒng)都會(huì)顯示常規(guī)的 Google 身份驗(yàn)證流程。如果他們還沒(méi)有帳號(hào),可以按下登錄屏幕上的按鈕并轉(zhuǎn)到注冊(cè)屏幕。在他們登錄或注冊(cè)后,會(huì)有以下流程可用: 驗(yàn)證電子郵件地址、重置密碼、登出和關(guān)聯(lián)社交身份驗(yàn)證帳號(hào)。所有平臺(tái)都適用電子郵件登錄,并支持 Google、Facebook 和 Twitter 的社交身份驗(yàn)證,部分支持 Apple (因?yàn)樗贿m用于 Android)。flutterfire_ui 中的身份驗(yàn)證支持多種場(chǎng)景和導(dǎo)航方案,以及自定義和本地化選項(xiàng)。您可以在官方文檔中參閱詳細(xì)文檔和示例:

https://firebase.flutter.dev/docs/ui/overview

并且,身份驗(yàn)證不是 flutterfire_ui 支持的唯一 Firebase 界面相關(guān)功能。在向用戶展示來(lái)自 Firebase 查詢的實(shí)時(shí)、無(wú)限滾動(dòng)的數(shù)據(jù)列表時(shí),此版本提供 FirestoreListView,您可以使用它在應(yīng)用中呈現(xiàn)實(shí)時(shí)查詢的結(jié)果,如下所示:

class UserListView extends StatelessWidget {  UserListView({Key? key}) : super(key: key);
  // live Firestore query  final usersCollection = FirebaseFirestore.instance.collection('users');
  @override  Widget build(BuildContext context) => Scaffold(        appBar: AppBar(title: const Text('Contacts')),        body: FirestoreListView(          query: usersCollection,          pageSize: 15,          primary: true,          padding: const EdgeInsets.all(8),          itemBuilder: (context, snapshot) {            final user = snapshot.data();
            return Column(              children: [                Row(                  children: [                    CircleAvatar(                      child: Text((user['firstName'] ?? 'Unknown')[0]),                    ),                    const SizedBox(width: 8),                    Column(                      crossAxisAlignment: CrossAxisAlignment.start,                      mainAxisAlignment: MainAxisAlignment.center,                      mainAxisSize: MainAxisSize.min,                      children: [                        Text(                          '${user['firstName'] ?? 'unknown'} '                          '${user['lastName'] ?? 'unknown'}',                          style: Theme.of(context).textTheme.subtitle1,                        ),                        Text(                          user['number'] ?? 'unknown',                          style: Theme.of(context).textTheme.caption,                        ),                      ],                    ),                  ],                ),                const Divider(),              ],            );          },        ),      );}

實(shí)際運(yùn)行效果如下:

或者,如果您想為用戶提供在表格中創(chuàng)建、讀取、更新和刪除條目的功能,可以使用 FirestoreDataTable:

class FirestoreTableStory extends StatelessWidget {  FirestoreTableStory({Key? key}) : super(key: key);
  // live Firestore query  final usersCollection = FirebaseFirestore.instance.collection('users');
  @override  Widget build(BuildContext context) {    return FirestoreDataTable(      query: usersCollection,      columnLabels: const {        'firstName': Text('First name'),        'lastName': Text('Last name'),        'prefix': Text('Prefix'),        'userName': Text('User name'),        'email': Text('Email'),        'number': Text('Phone number'),        'streetName': Text('Street name'),        'city': Text('City'),        'zipCode': Text('Zip code'),        'country': Text('Country'),      },    );  }}

運(yùn)行結(jié)果如下所示:

有關(guān)身份驗(yàn)證、列表視圖和數(shù)據(jù)表的詳細(xì)信息,請(qǐng)查看 flutterfire_ui 文檔。由于這是一個(gè)預(yù)覽版,我們計(jì)劃添加更多功能。如果您有問(wèn)題或功能需求,請(qǐng)前往 GitHub repo 的討論專區(qū)提交或提出問(wèn)題。

flutterfire_ui 文檔 https://firebase.flutter.dev/docs/ui/overview/

GitHub repo https://github.com/FirebaseExtended/flutterfire/discussions/6978

Firestore 對(duì)象/文檔映射 最后,我們?cè)?Firebase 和 Flutter 的集成方面添加了一個(gè)新功能: Firestore 對(duì)象/文檔映射器的 Alpha 版。Firestore ODM 旨在通過(guò)熟悉的類型安全、結(jié)構(gòu)化對(duì)象和方法簡(jiǎn)化 Firestore 的使用,從而幫助 Flutter 開(kāi)發(fā)者提高工作效率。Firestore ODM 使用代碼生成,允許您用類型安全的方式對(duì)數(shù)據(jù)建模,從而改進(jìn)與文檔和集合交互的語(yǔ)法:

@JsonSerializable()class Person {  Person({required this.name, required this.age});
  final String name;  final int age;}
@Collection(‘/persons’)final personsRef = PersonCollectionReference();

Firestore ODM

https://firebase.flutter.dev/docs/firestore-odm/overview/

這些類型就位后,您就可以執(zhí)行類型安全查詢:

personsRef.whereName(isEqualTo: 'Bob');personsRef.whereAge(isGreaterThan: 42);
ODM 還支持定義強(qiáng)類型子集,且提供內(nèi)置選項(xiàng),通過(guò) select 功能優(yōu)化 widget 重建。您可以在 Firestore ODM 文檔中了解所有這些功能及更多內(nèi)容。由于這是一個(gè) Alpha 版,我們正在尋求早期反饋,歡迎加入 FlutterFire 討論中的 Firestore ODM 會(huì)話以提供反饋和提問(wèn)。

Firestore ODM 文檔 https://firebase.flutter.dev/docs/firestore-odm/overview/

Firestore ODM 會(huì)話 https://github.com/FirebaseExtended/flutterfire/discussions/7475

桌面端

Flutter 2.8 版本朝著桌面端 (Windows、macOS 和 Linux) 的穩(wěn)定支持又前進(jìn)了一大步。我們對(duì)質(zhì)量的要求很高,包括國(guó)際化和本地化支持,例如我們新增的中文、韓文以及日文漢字 IME 支持。或者又比如我們正在構(gòu)建的對(duì) Windows 無(wú)障礙支持的緊密整合。僅僅讓穩(wěn)定渠道的 Flutter 在桌面設(shè)備上運(yùn)行是不夠的 (即便它已經(jīng)能在帶標(biāo)識(shí)的 beta 渠道運(yùn)行了),它還必須針對(duì)世界各地的語(yǔ)言和文化以及不同能力的用戶提供良好的運(yùn)行狀態(tài)。Flutter 桌面端支持在質(zhì)量方面尚未達(dá)到預(yù)期的水平,但我們正在向這個(gè)目標(biāo)邁進(jìn)!

#29620: 中文 IME 支持 https://github.com/flutter/engine/pull/29620

#24713: 韓文 IME 支持 https://github.com/flutter/engine/pull/24713

#29761: 日文漢字 IME 支持 https://github.com/flutter/engine/pull/29761

#77838: Windows 無(wú)障礙支持 https://github.com/flutter/flutter/issues/77838

Stable 渠道包含了一份 Beta 渠道的桌面支持 https://flutter.cn/docs/desktop#beta-snapshot-in-stable-channel

為了讓桌面端支持進(jìn)入穩(wěn)定版本,我們做了許多工作,其中包括完全重新構(gòu)建 Flutter 處理鍵盤事件的架構(gòu),以實(shí)現(xiàn)同步響應(yīng)。如此一來(lái)就可以用 widget 來(lái)處理按鍵,并取消其在樹的其他部分的傳遞。這方面的成果首先出現(xiàn)在 Flutter 2.5 中,并在 Flutter 2.8 中修復(fù)了一些問(wèn)題和回歸,實(shí)現(xiàn)了穩(wěn)定的質(zhì)量。除此之外,我們還在重新設(shè)計(jì)特定設(shè)備的鍵盤輸入處理方式,以及重構(gòu) Flutter 處理文本編輯的方式,所有這些對(duì)于鍵盤輸入密集型的桌面應(yīng)用都很有必要。

處理同步鍵盤事件

https://docs.google.com/document/d/1rWXSjkb2ZKv-cpg26lVK0aZi4cVeXJ8j7YmSJdq2TOM/edit#heading=h.pub7jnop54q0

#33521: 需要一個(gè)從嵌入器發(fā)送同步鍵盤事件至 Dart 并獲得響應(yīng)的方法

https://github.com/flutter/flutter/issues/33521

#44918: 特定設(shè)備的鍵盤事件應(yīng)該在嵌入器中發(fā)生

https://github.com/flutter/flutter/issues/44918

#86736: 文本編輯模型重構(gòu)

https://github.com/flutter/flutter/pull/86736

此外,我們還持續(xù)擴(kuò)展了 Flutter 的視覺(jué)密度支持,并開(kāi)放對(duì)話框的對(duì)齊方式,這都是為了實(shí)現(xiàn)更適用于桌面設(shè)備的界面。

#89353: 增加 visualDensity、focusNode 和 enableFeedback https://github.com/flutter/flutter/pull/89353

#88984: 允許對(duì)話框進(jìn)行自定義對(duì)齊 https://github.com/flutter/flutter/pull/88984

最后,F(xiàn)lutter 團(tuán)隊(duì)并不是唯一致力于 Flutter 桌面端支持的團(tuán)隊(duì)。舉個(gè)例子,Canonical 的桌面團(tuán)隊(duì)正在與 Invertase 合作,致力在 Linux 和 Windows 上實(shí)現(xiàn)最流行的 Flutter Firebase 插件。

您可以在 Invertase 博客中進(jìn)一步了解其預(yù)覽版:

https://invertase.io/blog/announcing-flutterfire-desktop

DartPad

完整的 Flutter 版本發(fā)布必然涉及工具方面的改進(jìn)。在此版本中,DartPad 最大的改進(jìn)是對(duì)更多 package 的支持。事實(shí)上,現(xiàn)在支持導(dǎo)入的 package 達(dá)到了 23 個(gè)。除了對(duì)幾個(gè) Firebase 服務(wù)的支持外,還支持 bloc、characters、collection、google_fonts 和 flutter_riverpod 等流行的 package。DartPad 團(tuán)隊(duì)將繼續(xù)增加新的 package,如果您想查看目前支持哪些 package,可以點(diǎn)擊下方截圖右下角的信息圖標(biāo):

如果您想要了解 DartPad 支持新 package 的計(jì)劃,請(qǐng)查看 Dart wiki 上的這篇文章:

https://github.com/dart-lang/dart-pad/wiki/Adding-support-for-a-new-package

DartPad 還有一個(gè)相當(dāng)實(shí)用的新特性。此前,DartPad 一直運(yùn)行最新的穩(wěn)定版本。在這個(gè)版本中,您可以讓 DartPad 使用最新的 beta 版或上一個(gè)穩(wěn)定版本 (稱為 "舊渠道"),只需使用狀態(tài)欄中新增的渠道 (Channel) 菜單切換即可。

這一點(diǎn)十分實(shí)用,舉個(gè)例子,假設(shè)您正在撰寫一篇博文,而最新的穩(wěn)定版本卻有點(diǎn)過(guò)時(shí)……

移除 dev 渠道

Flutter 的 "渠道 (channel)" 控制著底層 Flutter 框架和引擎在您開(kāi)發(fā)機(jī)器上變化的速度,穩(wěn)定 (stable) 渠道表示最少的流失,而主 (master) 渠道則相反。由于資源限制,我們最近停止了 dev 渠道的更新。雖然我們確實(shí)收到了與此相關(guān)的一些問(wèn)題,但我們發(fā)現(xiàn)只有不到 3% 的 Flutter 開(kāi)發(fā)者使用該渠道。因此我們決定正式停用 dev 渠道。雖然很少有開(kāi)發(fā)者使用 dev 渠道,但 Flutter 工程師需要花費(fèi)大量時(shí)間和精力來(lái)維護(hù)它。如果您所有的時(shí)間都在使用穩(wěn)定渠道 (正如 90% 以上的 Flutter 開(kāi)發(fā)者所做的那樣),那您根本不會(huì)再需要 dev 渠道。放棄這個(gè)渠道意味著您可以少做一個(gè)決定,而 Flutter 團(tuán)隊(duì)可以將時(shí)間和精力放在其他事情上。

您可以使用 flutter channel 命令來(lái)決定要使用哪個(gè)渠道。以下是 Flutter 團(tuán)隊(duì)對(duì)每個(gè)渠道的看法:

穩(wěn)定 (stable) 渠道代表著我們構(gòu)建的最高質(zhì)量。此渠道一般每季度發(fā)布一次,期間會(huì)對(duì)關(guān)鍵問(wèn)題進(jìn)行熱修復(fù)。這是 "慢" 渠道: 安全、成熟、提供長(zhǎng)期支持。

Beta 渠道為喜歡更快節(jié)奏的開(kāi)發(fā)者們提供了一種替代 stable 渠道的快速迭代方案。目前每月發(fā)布,在發(fā)布前穩(wěn)定。這是 "快" 渠道。如果我們發(fā)現(xiàn) dev 渠道能滿足 beta 渠道目前無(wú)法滿足的需求,我們可能會(huì)改變對(duì) beta 渠道的處理方案來(lái)滿足這些需求 (例如加快 beta 渠道的發(fā)布節(jié)奏,以及降低其測(cè)試和熱修復(fù)級(jí)別)。

主 (master) 渠道是活躍的開(kāi)發(fā)渠道。我們對(duì)此渠道不提供支持,但我們會(huì)針對(duì)它進(jìn)行全面的單元測(cè)試。能適應(yīng)不穩(wěn)定版本的貢獻(xiàn)者或高級(jí)用戶可以使用該渠道。在這個(gè)渠道中,我們會(huì)快速構(gòu)建和破壞一些功能 (然后很快將其修復(fù))。

在未來(lái)幾個(gè)月停用 dev 渠道的過(guò)程中,請(qǐng)您考慮使用 beta 或主 (master) 渠道,具體取決于您對(duì)流失的容忍度,以及您對(duì)更新和質(zhì)量的要求。

重大變更

像往常一樣,我們會(huì)盡力減少每個(gè)版本中重大變更的數(shù)量。在 Flutter 2.8 中,除了已經(jīng)過(guò)期并根據(jù)我們的重大變更政策移除的已棄用 API 之外,沒(méi)有其他重大變更:

https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes

#90292: 移除被棄用的 autovalidate

https://github.com/flutter/flutter/pull/90292

#90293: 移除被棄用的 FloatingHeaderSnapConfiguration.vsync

https://github.com/flutter/flutter/pull/90293

#90294: 移除被棄用的 AndroidViewController.id

https://github.com/flutter/flutter/pull/90294

http://androidviewcontroller.id/

#90295: 移除被棄用的 BottomNavigationBarItem.title

https://github.com/flutter/flutter/pull/90295

#90296: 移除已棄用的文本輸入格式類

https://github.com/flutter/flutter/pull/90296

如果您仍在使用這些 API,并且想要詳細(xì)了解如何更新您的代碼,可以閱讀遷移指南。非常感謝社區(qū)一如既往地提供測(cè)試,幫助我們識(shí)別以上重大變更。

遷移指南: 2.5 版本之后棄用的 API https://flutter.cn/docs/release/breaking-changes/2-5-deprecations

提供測(cè)試 https://github.com/flutter/tests/blob/master/README.md

總結(jié)

在我們告別 2021 年并展望 2022 年之際,F(xiàn)lutter 團(tuán)隊(duì)要對(duì)整個(gè) Flutter 社區(qū)的工作和支持表示感謝。誠(chéng)然,我們正在為世界上越來(lái)越多的開(kāi)發(fā)者構(gòu)建 Flutter,但沒(méi)有您我們就無(wú)法做到這一切。Flutter 社區(qū)是獨(dú)一無(wú)二的,我們感謝您所做的一切。祝您假期愉快,我們新的一年見(jiàn)!

原文標(biāo)題:Flutter 2.8 | 一文解讀重點(diǎn)更新

文章出處:【微信公眾號(hào):谷歌開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭菁

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7002

    瀏覽量

    88938
  • 攝像頭
    +關(guān)注

    關(guān)注

    59

    文章

    4836

    瀏覽量

    95597
  • 管理器
    +關(guān)注

    關(guān)注

    0

    文章

    246

    瀏覽量

    18502

原文標(biāo)題:Flutter 2.8 | 一文解讀重點(diǎn)更新

文章出處:【微信號(hào):Google_Developers,微信公眾號(hào):谷歌開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙Flutter實(shí)戰(zhàn):07混合開(kāi)發(fā)

    # 鴻蒙Flutter實(shí)戰(zhàn):混合開(kāi)發(fā) 鴻蒙Flutter混合開(kāi)發(fā)主要有兩種形式。 ## 1.基于har 將flutter module打包成har包,在原生鴻蒙項(xiàng)目中,以har包的方式引入
    發(fā)表于 10-23 16:00

    鴻蒙Flutter實(shí)戰(zhàn):11-使用 Flutter SDK 3.22.0

    # 使用 Flutter SDK 3.22.0 ## SDK 安裝 參考[鴻蒙Flutter實(shí)戰(zhàn):01-搭建開(kāi)發(fā)環(huán)境]文章的說(shuō)明,首先安裝 Flutter SDK 3.22.0。 目前鴻蒙化
    發(fā)表于 11-01 15:03

    [原創(chuàng)]Ember 300系列閃亮登場(chǎng)

    Ember 300系列閃亮登場(chǎng) EMBER公司生產(chǎn)的EM300系列可謂是世界上最完整的ZigBee解決方案,其產(chǎn)品擁有者多項(xiàng)技術(shù)優(yōu)勢(shì)。  
    發(fā)表于 09-02 10:19

    【Banana Pi】新外殼閃亮登場(chǎng)--高大上

    【Banana Pi】新外殼閃亮登場(chǎng)--高大上轉(zhuǎn)自lemaker歡迎大家體驗(yàn)試用.白色外殼1.jpg (106.17 KB)白色外殼1白色外殼2.jpg (96.56 KB)白色外殼2黑色外殼1.jpg (34.48 KB)黑色外殼1黑色外殼2.jpg (33.93 KB
    發(fā)表于 08-09 21:15

    深入理解flutter的編譯原理與優(yōu)化

    摘要: 閑魚技術(shù)-正物 問(wèn)題背景 對(duì)于開(kāi)發(fā)者而言,什么是Flutter?它是用什么語(yǔ)言編寫的,包含哪幾部分,是如何被編譯,運(yùn)行到設(shè)備上的呢?Flutter如何做到Debug模式Hot Reload
    發(fā)表于 07-02 17:47

    聯(lián)通宣布其WCDMA網(wǎng)絡(luò)閃亮登場(chǎng),華為推出7款3G手機(jī)

    聯(lián)通宣布其WCDMA網(wǎng)絡(luò)閃亮登場(chǎng),華為推出7款3G手機(jī) 中國(guó)電信日:5月17日,在聯(lián)通宣布其WCDMA網(wǎng)絡(luò)正式開(kāi)始商用并放號(hào)的發(fā)布會(huì)上,包括華為在內(nèi)的眾多
    發(fā)表于 05-20 08:55 ?662次閱讀

    USB3.0商業(yè)化產(chǎn)品Intel秋季IDF會(huì)展閃亮登場(chǎng)

    USB3.0商業(yè)化產(chǎn)品Intel秋季IDF會(huì)展閃亮登場(chǎng) 看起來(lái)USB3.0標(biāo)準(zhǔn)似乎很快就會(huì)走向正式商業(yè)化,下周在Intel秋季開(kāi)發(fā)者論壇(IDF)會(huì)議上,幾家公司都會(huì)展出他們裝備了USB3.0接
    發(fā)表于 12-30 11:38 ?648次閱讀

    iPhone版超級(jí)瑪麗即將閃亮登場(chǎng)

    iPhone版超級(jí)瑪麗即將閃亮登場(chǎng) 一款模仿任天堂《超級(jí)瑪麗》的游戲應(yīng)用上周獲準(zhǔn)在蘋果應(yīng)用商店里出售,業(yè)內(nèi)人士認(rèn)為,這或?qū)⒁?/div>
    發(fā)表于 03-03 17:29 ?554次閱讀

    萬(wàn)眾期待閃亮登場(chǎng)?小米6再曝光:首發(fā)835,漲價(jià)成定局!

    今天,高通正式宣布3月22日在北京召開(kāi)驍龍835亞洲首秀發(fā)布會(huì),這預(yù)示著萬(wàn)眾期待的小米6也即將閃亮登場(chǎng)。
    發(fā)表于 03-14 12:31 ?650次閱讀

    英特爾 Shooting Star無(wú)人機(jī)與Volocopter飛行汽車相繼閃亮登場(chǎng)!

    浩瀚的天空一直令人向往,在探索天空的路上人類從未止歇。而無(wú)人機(jī)作為英特爾在天空領(lǐng)域的探索方向,也是本次CES2018展會(huì)上的亮點(diǎn)之一。伴隨著全場(chǎng)鎂光燈的閃爍與觀眾的歡呼,英特爾 Shooting Star無(wú)人機(jī)與Volocopter飛行汽車相繼閃亮登場(chǎng)!
    的頭像 發(fā)表于 07-05 20:53 ?2478次閱讀

    百度網(wǎng)盤三星版閃亮登場(chǎng):為用戶云存儲(chǔ)實(shí)現(xiàn)新便利

    在三星Galaxy S21系列中國(guó)區(qū)發(fā)布會(huì)上,百度網(wǎng)盤三星版閃亮登場(chǎng)。
    的頭像 發(fā)表于 01-19 09:32 ?3591次閱讀

    Flutter Go Flutter學(xué)習(xí)App

    ./oschina_soft/flutter-go.zip
    發(fā)表于 06-23 09:21 ?0次下載
    <b class='flag-5'>Flutter</b> Go <b class='flag-5'>Flutter</b>學(xué)習(xí)App

    flutter_ocr Flutter開(kāi)發(fā)的OCR軟件

    ./oschina_soft/flutter_ocr.zip
    發(fā)表于 06-24 14:43 ?3次下載
    <b class='flag-5'>flutter</b>_ocr <b class='flag-5'>Flutter</b>開(kāi)發(fā)的OCR軟件

    Flutter 共創(chuàng)未來(lái) | Flutter Forward 活動(dòng)精彩回顧

    作者 / Google 開(kāi)發(fā)者框架和語(yǔ)言 (含 Flutter、Dart 和 Go) 產(chǎn)品經(jīng)理 用戶體驗(yàn)總監(jiān) Tim Sneath 我們很高興可以在 Flutter Forward 活動(dòng) 上分享我們
    的頭像 發(fā)表于 02-22 23:20 ?587次閱讀

    淺談兼容 OpenHarmony 的 Flutter

    OpenHarmony SIG 組織在 Gitee 開(kāi)源了兼容 OpenHarmony 的 Flutter。該組織主要用于孵化 OpenHarmony 相關(guān)的開(kāi)源生態(tài)項(xiàng)目。 ? ? ▲ 倉(cāng)庫(kù)地址
    的頭像 發(fā)表于 02-02 15:22 ?608次閱讀
    淺談兼容 OpenHarmony 的 <b class='flag-5'>Flutter</b>
    RM新时代网站-首页