回答有关 Flutter App 开发的问题

简介:

这篇文章旨在解释一些问题,而不是对每个方面的详细表述。为简洁起见,我可能没有涉及到一些例外情况。请注意,Flutter 本身也有一个针对各种背景下的常问问题页面 flutter.io,在这里我将更多地关注我经常看到的问题。虽然其中一些也包含在 Flutter 常见问题解答中,但是我还是尝试着去给出我的观点。

布局文件在哪里?/ 为什么 Flutter 没有布局文件?

在 Android 框架中,我们将 Activity 分为布局和代码。因此,我们需要引用视图以在 Java 中使用它们。(当然 Kotlin 可以避免这种情况。)布局文件本身用 XML 编写,包含 Views 和 ViewGroups。

Flutter 使用一种全新的方法,而不是视图,使用 Widget。在 Android 中,View 就是布局的一个组件,但在 Flutter 中,Widget 几乎就是一切。从按钮到布局结构,所有的这些都是一个 Widget。他在这里的优势是可定制性。想象一下 Android 中的一个按钮。它具有文本等属性,可让你向按钮添加文本。但 Flutter 中的按钮不会将标题作为字符串,而是另一个 widget。这意味着,在按钮内部,您可以拥有文本,图像,图标以及您可以想象的任何内容,并且不会破坏布局约束。这也让你可以很容易地制作自定义 Widget,而在 Android 中制作自定义 view 是一件相当困难的事情。

拖放不比在代码中进行布局更容易吗?

在某些方面,这是事实。但 Flutter 社区中的很多人都更喜欢代码方式,但这并不意味着拖放无法实现。如果你完全喜欢拖放,那么 Flutter Studio 是我推荐的一个很棒的资源,它可以通过拖放帮助你生成布局。这是一个让我印象深刻的工具,很想知道它将来会如何发展。

链接: flutterstudio.app

Flutter 是否像浏览器一样工作?/ 它与基于 WebView 的应用程序有何不同?

简单地回答这个问题:为 WebView 编写的代码或类似运行的应用程序必须经过多个层才能最终执行。从本质上讲,Flutter 通过编译到原生 ARM 代码来实现这两个平台上的执行。“混合”应用程序缓慢,缓慢,与它们运行的平台看起来不同。Flutter 应用程序的运行速度远远超过混合应用程序。此外,使用插件访问本机组件和传感器要比使用无法充分利用其平台的 WebView 更容易。

为什么 Flutter 项目中有 Android 和 iOS 文件夹?

Flutter项目中有三个主要文件夹:lib、android 和 ios 。'lib' 负责处理你的 Dart 文件。Android 和 iOS 文件夹用于在各自的平台上实际构建应用程序,并在其上运行 Dart 文件。它们还可以帮助您为项目添加权限和特定于平台的功能。当您运行 Flutter 项目时,它会根据运行的模拟器或设备进行构建,使用其中的文件夹执行 Gradle 或 XCode 构建。简而言之,这些文件夹为 Flutter 代码的运行成为一个完整的 APP 奠定了基础。

为什么我的 Flutter 这么大?

如果你运行 Flutter 应用程序,你知道它很快。非常。它是如何做到的?在构建应用程序时,它实际上用到了所有资源文件,而不是仅使用特定的资源文件。为什么这有帮助?因为如果我将图标从一个更改为另一个,则不必完全重建应用程序。这就是 Flutter 调试版本如此之大的原因。创建发布版本时,只会获取所需的资源文件,并且我们会获得更多习惯的大小。Flutter 应用程序仍然比 Android 应用程序略大,但它相当小,加上 Flutter 团队一直在寻找减少应用程序大小的方法。

如果我是编程新手并且我想从移动开发开始,我应该从 Flutter 开始吗?

这有两部分答案。

  1. 对于相同的页面,Flutter 非常适合编码并且代码比 Android 或 iOS 应用程序少得多。因此对于大多数应用程序,我认为不会出现重大问题。
  2. 您需要记住的一件事是 Flutter 还依赖于 Android 和 iOS 项目,你至少需要熟悉那些项目结构。如果您想编写任何原生代码,你肯定需要在任一平台或两个平台上都有经验。

我的个人意见是学习 Android / iOS 一两个月,然后再开始学习 Flutter。

Packages 和 plugins 是什么?

Packages 允许您将新的工具或功能导入你的应用程序。Packages 和 plugins 之间有一点区别。Packages 通常是新的组件或纯粹在 Dart 中编写的代码,而 plugins 允许更多功能在设备上使用原生代码。通常在 DartPub 上,Packages 和 plugins 都被称为包,并且只有在创建新包时才明确提到区别。

什么是 pubspec.yaml 文件,它有什么作用?

Pubspec.yaml 允许你定义应用依赖的包,声明你的资源文件,如图片,音频,视频等。它还允许你为你的应用设置约束。对于 Android 开发人员来说,这大致类似于 build.gradle 文件,但两者之间的差异也很明显。

为什么第一个 Flutter 应用程序构建需要这么长时间?

首次构建 Flutter 应用程序时,会构建特定于设备的 APK 或 IPA文件。因为要用到 Gradle 和 XCode 用于构建文件,需要时间。下次重新启动或热重新加载应用程序时,Flutter 实际上会在现有应用程序之上修补更改,从而实现快速刷新。

注意:热重载或重启所做的更改不会设备 APK 或 IPA 文件中保存。要确保你的应用在设备上完成所有更改,请考虑停止并重新运行该应用。

State 是什么意思?什么是 setState()?

简单来说,“State” 是 widget 变量值的集合。 任何像计数器,文本等一样可以改变的东西都可以成为 State 的一部分。想象一个柜台应用程序,主要的动态是计数器计数。计数更改时,需要刷新屏幕以显示新值。 setState() 本质上是一种告诉应用程序使用新值刷新和重建屏幕的方法。

什么是有状态和无状态小部件?

太长了,简单的说:允许你刷新屏幕的 Widget是一个有状态小部件。反之则是无状态的。

详细地说,具有可以更改的内容的动态窗口小部件应该是有状态的 Widget。无状态 Widget 只能在参数更改时更改内容,因此需要在窗口小部件层次结构中的位置点之上完成。包含静态内容的屏幕或窗口小部件应该是无状态窗口小部件,但要更改内容,需要是有状态的。

如何处理 Flutter 代码中的缩进和结构?

Android Studio 提供了一些工具,可以更轻松地构建 Flutter 代码。两个主要的方法是:

  1. Alt + Enter/ Command + Enter:这使你可以轻松地在复杂的层次结构中包装和删除窗口小部件以及交换窗口小部件。要使用此功能,只需将光标指向小部件声明,然后按键即可为您提供一些选项。这种智能的感觉有时像天赐之物。
  2. DartFMT:dartfmt 格式化您的代码以保持干净的层次结构和缩进。在你不小心移动几个括号后,它使您的代码更漂亮。

为什么我们将函数传递给小部件?

我们将一个函数传递给一个小部件,主要是说“当事情发生时调用这个函数”。函数是 Dart 中的第一类对象,可以作为参数传递给其他函数。使用 Android(

Java 回调:

button.setOnClickListener(new View.OnClickListener() {
    @override
    public void onClick(View view) {
      // Do something here
    }
  }
);

(请注意,这只是用于设置侦听器的代码。定义按钮需要单独的 XML 代码。)

Dart equivalent:

FlatButton(
  onPressed: () {
    // Do something here
  }
)

(Dart同时进行声明以及设置回调。)

这变得更加整洁,并帮助我们避免不必要的复杂化。

什么是 ScopedModel / BLoC 模式?

ScopedModel 和 BLoC(业务逻辑组件)是常见的 Flutter 应用程序架构模式,可帮助将业务逻辑与 UI 代码分离,并使用更少的有状态 widget。更好的资源来学习这些,我不认为有理由在几行中解释它们。

我希望这篇文章能够消除一些疑问,并且我将尽力更新我遇到的常见问题。如果你喜欢这篇文章,记得点击关注!后续持续有文章更新发布喔

作者:雇个城管打天下
链接:https://juejin.im/post/5be98784518825170200254e
来源:掘金

相关文章
|
15天前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
113 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
3天前
|
IDE API 开发工具
HarmonyOS NEXT-Flutter混合开发之鸿蒙-代码实践
本文介绍了在Flutter三端分离模式下,将纯血鸿蒙混入Flutter项目的实践经验。基于咸鱼团队的flutter_boost和自定义FlutterPlugin实现,涵盖环境搭建、Flutter模块创建、flutter_boost集成、鸿蒙侧适配、双端通信及原生调用等内容。详细说明了Flutter与鸿蒙间的页面跳转、数据传递及方法调用的实现方式,为开发者提供参考。总结指出,通过管理页面栈和实现双端交互,可满足常规开发需求。
|
1月前
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
1728 20
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
1月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
69 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
9天前
|
搜索推荐 数据挖掘
直播App程序源码开发前期功能调研:运营角度思考如何有利于推广运营获利
在直播App程序源码开发的前期,功能调研至关重要。除了技术实现的可行性,更需要从运营角度出发,思考哪些功能能够助力推广运营,最终实现获利。山东布谷科技从运营角度,对直播App功能进行调研分析
|
17天前
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
37 7
|
24天前
|
缓存
flutter3-wetrip跨平台自研仿携程app预约酒店系统模板
基于最新跨平台框架flutter3.x+dart3+getx+flutter_datepicker纯手写实战的一款仿去哪儿/携程旅游酒店预约客房app系统。
35 4
|
1月前
|
应用服务中间件 Go Android开发
通过外部链接启动 Flutter App(详细介绍及示例)
本文介绍了通过外部链接启动 Flutter App 的两种方式:`firebase_dynamic_links` 和 `app_links`。前者由 Firebase 提供,支持生成分享链接并自动处理未安装应用时的跳转(如跳转到应用商店),但已于2025年8月停止服务;后者则需开发者自行处理未安装应用时的重定向逻辑。文中详细说明了两者的配置步骤、代码实现及注意事项,推荐使用 `app_links` 进行新项目开发。
37 1
|
1月前
|
安全 JavaScript 前端开发
小游戏源码开发之可跨app软件对接是如何设计和开发的
小游戏开发团队常需应对跨平台需求,为此设计了成熟的解决方案。流程涵盖游戏设计、技术选型、接口设计等。首先明确游戏功能与特性,选择合适的技术架构和引擎(如Unity或Cocos2d-x)。接着设计通用接口,确保与不同App的无缝对接,并制定接口规范。开发过程中实现游戏逻辑和界面,完成登录、分享及数据对接功能。最后进行测试优化,确保兼容性和性能,发布后持续维护更新。
|
1月前
|
前端开发 Java 测试技术
语音app系统软件源码开发搭建新手启蒙篇
在移动互联网时代,语音App已成为生活和工作的重要工具。本文为新手开发者提供语音App系统软件源码开发的启蒙指南,涵盖需求分析、技术选型、界面设计、编码实现、测试部署等关键环节。通过明确需求、选择合适的技术框架、优化用户体验、严格测试及持续维护更新,帮助开发者掌握开发流程,快速搭建功能完善的语音App。

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
  • 3
    Axure原型模板与元件库APP交互设计素材(附资料)
  • 4
    【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
  • 5
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 6
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
  • 7
    仿第八区APP分发下载打包封装系统源码
  • 8
    2025同城线下陪玩APP开发/电竞游戏平台搭建游戏陪玩APP源码/语音APP开发
  • 9
    (ERP系统查看DWG)MxCAD APP调用内部弹框的方法
  • 10
    【02】微信支付商户申请下户到配置完整流程-微信开放平台申请APP应用-微信商户支付绑定appid-公众号和小程序分别申请appid-申请+配置完整流程-优雅草卓伊凡