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