Flutter面试常见开发问题
本文主要介紹Flutter面試常見開發(fā)問題
Flutter 使用了一種全新的方法,您可以使用 widgets代替 Views 。Android 中的 View 主要是布局的一個元素,但在 Flutter 中,Widget 幾乎就是一切。從按鈕到布局結(jié)構(gòu)的一切都是小部件。這里的優(yōu)勢在于可定制性。想象一下 Android 中的一個按鈕。它具有文本等屬性,可讓您向按鈕添加文本。但是 Flutter 中的按鈕不是將標(biāo)題作為字符串,而是另一個小部件。這意味著**在按鈕內(nèi)你可以有文本、圖像、圖標(biāo)和幾乎任何你可以想象的東西,**而不會打破布局限制。這也讓您可以非常輕松地制作自定義小部件,而在 Android 中制作自定義視圖是一件相當(dāng)困難的事情。
拖拽不是比在代碼中制作布局更容易嗎?
在某些方面,確實如此。但是 Flutter 社區(qū)中的很多人更喜歡代碼方式,但這并不意味著無法實現(xiàn)拖拽。如果你完全喜歡拖拽,那么 Flutter Studio 是我推薦的一個很棒的資源,它可以幫助你通過拖放生成布局。這是一個讓我印象深刻的工具,很想看看它是如何發(fā)展的。
鏈接:https : //flutterstudio.app
Flutter 是否像瀏覽器一樣工作?/ 它與基于 WebView 的應(yīng)用程序有何不同?
簡單地回答這個問題:您為 WebView 或類似運行的應(yīng)用程序編寫的代碼必須經(jīng)過多個層才能最終執(zhí)行。從本質(zhì)上講,Flutter 通過編譯為原生 ARM代碼以在兩個平臺上執(zhí)行,從而實現(xiàn)了跨越?!盎旌稀睉?yīng)用程序緩慢、緩慢,并且看起來與它們運行的平臺不同。Flutter 應(yīng)用程序的運行速度比它們的混合應(yīng)用程序快得多。此外,使用插件訪問原生組件和傳感器比使用無法充分利用其平臺的 WebView 更容易。
為什么 Flutter 項目中有 Android 和 iOS 文件夾?
Flutter 項目中主要有 3 個文件夾:lib、android 和 ios?!甽ib’ 負(fù)責(zé)處理您的 Dart 文件。Android 和 iOS 文件夾的存在是為了在各自的平臺上實際構(gòu)建應(yīng)用程序,并在其上運行 Dart 文件。它們還幫助您向項目添加權(quán)限和特定于平臺的功能。當(dāng)您運行 Flutter 項目時,它會根據(jù)運行的模擬器或設(shè)備進(jìn)行構(gòu)建,使用其中的文件夾進(jìn)行 Gradle 或 XCode 構(gòu)建。簡而言之,這些文件夾是整個應(yīng)用程序,它們?yōu)?Flutter 代碼的運行奠定了基礎(chǔ)。
為什么我的 Flutter 應(yīng)用這么大?
如果您運行過 Flutter 應(yīng)用程序,您就會知道它的速度很快。速度極快。它是如何做到的?在構(gòu)建應(yīng)用程序時,它不是只使用特定資源,而是實質(zhì)上需要所有資源。為什么這有幫助?因為如果我將一個圖標(biāo)從一個更改為另一個,則不必完全重建應(yīng)用程序。這就是 Flutter調(diào)試構(gòu)建如此龐大的原因。創(chuàng)建發(fā)布版本時,只會獲取所需的資源,并獲得我們更習(xí)慣的大小。Flutter 應(yīng)用程序仍然會比 Android 應(yīng)用程序大一點,但它相當(dāng)小,而且 Flutter 團(tuán)隊一直在尋找減少應(yīng)用程序大小的方法。
如果我是編程新手,想從移動端開發(fā)入手,應(yīng)該從 Flutter 開始嗎?
這有更多的兩部分答案。
我個人的意見是先學(xué)習(xí)一兩個月的 Android/iOS,然后從 Flutter 開始。
什么是package和插件?
package允許您將新的小部件或功能導(dǎo)入您的應(yīng)用程序。package和插件之間有一個小的區(qū)別。包通常是純粹用 Dart 編寫的新組件或代碼,而插件則可以使用本機(jī)代碼在設(shè)備端提供更多功能。通常在 DartPub 上,包和插件都被稱為包,只有在創(chuàng)建新包時才會明確提到區(qū)別。
什么是 pubspec.yaml 文件,它有什么作用?
Pubspec.yaml 允許您定義您的應(yīng)用程序依賴的包,聲明您的資產(chǎn),如圖像、音頻、視頻等。它還允許您為您的應(yīng)用程序設(shè)置約束。對于 Android 開發(fā)者來說,這大致類似于 build.gradle 文件,但兩者之間的差異也很明顯。
為什么第一個 Flutter 應(yīng)用構(gòu)建需要這么長時間?
首次構(gòu)建 Flutter 應(yīng)用程序時,會構(gòu)建特定于設(shè)備的 APK 或 IPA 文件。因此,使用 Gradle 和 XCode 構(gòu)建文件需要時間。下次重新啟動或熱加載應(yīng)用程序時,Flutter 基本上會在現(xiàn)有應(yīng)用程序之上修補(bǔ)更改,從而提供極快的刷新。
注意:通過熱重載或重啟所做的更改不會保存在設(shè)備 APK 或 IPA 文件中。為確保您的應(yīng)用在設(shè)備上進(jìn)行所有更改,請考慮再次停止并運行該應(yīng)用。
state是什么意思?什么是 setState()?
**簡單來說,“狀態(tài)”是小部件變量值的集合。**任何可以改變的東西,比如計數(shù)器計數(shù)、文本等,都可以成為 State 的一部分。想象一個計數(shù)器應(yīng)用程序,主要的動態(tài)是計數(shù)器計數(shù)。當(dāng)計數(shù)改變時,需要刷新屏幕以顯示新值。setState() 本質(zhì)上是一種告訴應(yīng)用程序使用新值刷新和重建屏幕的方法。
什么是有狀態(tài)和無狀態(tài)小部件?
TL;DR:允許您刷新屏幕的小部件是有狀態(tài)小部件。沒有狀態(tài)的小部件是無狀態(tài)的。
更詳細(xì)地說,一個內(nèi)容可以改變的動態(tài)小部件應(yīng)該是一個有狀態(tài)的小部件。無狀態(tài)小部件只能在更改參數(shù)時更改內(nèi)容,因此需要在小部件層次結(jié)構(gòu)中的位置點上方完成。包含靜態(tài)內(nèi)容的屏幕或小部件應(yīng)該是無狀態(tài)小部件,但要更改內(nèi)容,需要有狀態(tài)。
你如何處理 Flutter 代碼中的縮進(jìn)和結(jié)構(gòu)?
Android Studio 提供了工具來簡化 Flutter 代碼的結(jié)構(gòu)化。主要的兩點是:
為什么我們將函數(shù)傳遞給小部件?
我們將一個函數(shù)傳遞給一個小部件,本質(zhì)上是說,“當(dāng)有事情發(fā)生時調(diào)用這個函數(shù)”。函數(shù)是 Dart 中的第一類對象,可以作為參數(shù)傳遞給其他函數(shù)。使用 Android (<Java 8) 等接口的回調(diào)對于簡單的回調(diào)有太多的樣板代碼。
Java回調(diào):
button.setOnClickListener(new View.OnClickListener() {@overridepublic void onClick(View view) {// Do something here}} );(注意,這只是設(shè)置監(jiān)聽器的代碼。定義按鈕需要單獨的 XML 代碼。)
Dart equivalent:
FlatButton(onPressed: () {// Do something here} )(Dart 既做聲明又設(shè)置回調(diào)。)
這變得更加清晰和有條理,并幫助我們避免不必要的復(fù)雜化
總結(jié)
以上是生活随笔為你收集整理的Flutter面试常见开发问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息系统项目管理师项目变更管理
- 下一篇: 在 Flutter 中更改文本的字体系列