build 方法被拆分成三个不同的方法。如果 showLoadingDialog()
返回 true
(当 widgets.length == 0
),渲染 ProgressIndicator
。否则,在 ListView
里渲染网络请求返回的数据。
在哪里放置分辨率相关的图片文件?
Flutter 遵循一个简单的类似 iOS 的密度相关的格式。文件可以是一倍 (1.0x
)、两倍 (2.0x
)、三倍 (3.0x
) 或其它的任意倍数。
Flutter 没有 dp
单位,但是有逻辑像素尺寸,基本和设备无关的像素尺寸是一样的。
字符串储存在哪里?如何处理本地化?
Flutter 当下并没有一个特定的管理字符串的资源管理系统。
将字符串作为静态域存放在类中,并通过类访问它们。
Flutter 开发者使用 intl 包 进行国际化和本地化。
Gradle 文件的对应物是什么?我该如何添加依赖?
在 pubspec.yaml
文件中定义在 Flutter 里使用的外部依赖。 pub.dev 是查找 Flutter packages 的好地方
如何监听 Android Activity 的生命周期事件?
绑定 WidgetsBinding
观察者并监听 didChangeAppLifecycleState()
的变化事件来监听生命周期。
可以被观察的生命周期事件有:
-
inactive
— 应用处于非活跃状态并且不接收用户输入。这个事件只适用于 iOS,Android 上没有对应的事件; -
paused
— 应用当前对用户不可见,无法响应用户输入,并运行在后台。这个事件对应于 Android 中的onPause()
; -
resumed
— 应用对用户可见并且可以响应用户的输入。这个事件对应于 Android 中的onPostResume()
; -
suspending
— 应用暂时被挂起。这个事件对应于 Android 中的onStop
; iOS 上由于没有对应的事件,因此不会触发此事件。
LinearLayout 的对应概念是什么?
Row 或者 Column Widget 来实现相同的效果。
RelativeLayout 的对应概念是什么?
组合使用 Column、Row 和 Stack Widget 实现 RelativeLayout 的效果。
ScrollView 的对应概念是什么?
实现这个功能的最简单的方法是使用 ListView widget。
在 Flutter 中如何处理屏幕旋转?
FlutterView 会处理配置的变化,前提条件是在 AndroidManifest.xml 文件中声明了:
android:configChanges=“orientation|screenSize”
Flutter 中如何为一个 Widget 添加点击监听器?
如果 Widget 支持事件监听,那么向它传入一个方法并在方法中处理事件。例如,RaisedButton 有一个 onPressed
参数
如果 Widget 不支持事件监听,将 Widget 包装进一个 GestureDetector 中并向 onTap
参数传入一个方法。
如何处理 Widget 上的其它手势?
使用 GestureDetector 可以监听非常多的手势,例如:
-
Tap
-
onTapDown
- 一个可能产生点击事件的指针触摸到屏幕的特定位置。 -
onTapUp
- 一个产生了点击事件的指针停止触摸屏幕的特定位置。 -
onTap
- 一个点击事件已经发生。 -
onTapCancel
- 之前触发了onTapDown
事件的指针不会产生点击事件。 -
Double tap
-
onDoubleTap
- 用户在屏幕同一位置连续快速地点击两次。 -
Long press
-
onLongPress
- 指针在屏幕的同一位置保持了一段较长时间的触摸状态。 -
Vertical drag
-
onVerticalDragStart
- 指针已经触摸屏幕并可能开始垂直移动。 -
onVerticalDragUpdate
- 触摸屏幕的指针在垂直方向移动了更多的距离。 -
onVerticalDragEnd
- 之前和屏幕接触并垂直移动的指针不再继续和屏幕接触,并且在和屏幕停止接触的时候以一定的速度移动。 -
Horizontal drag
-
onHorizontalDragStart
- 指针已经触摸屏幕并可能开始水平移动。 -
onHorizontalDragUpdate
- 触摸屏幕的指针在水平方向移动了更多的距离。 -
onHorizontalDragEnd
- 之前和屏幕接触并水平移动的指针不再继续和屏幕接触,并且在和屏幕停止接触的时候以一定的速度移动。
ListView 在 Flutter 中的对应概念是什么?
因为 Flutter widget 不可变的特点,你需要向 ListView 传入一组 widget, Flutter 会保证滑动的快速顺畅。
如何知道点击了哪个列表项?
使用传入 widget 的触摸监听。
如何动态更新 ListView?
在 Flutter 中,如果你准备在 setState()
里更新一组 widget,你很快会发现你的数据并没有更新到界面上。这是因为当 setState()
被调用的时候, Flutter 渲染引擎会查看 Widget 树是否有任何更改。当引擎检查到 ListView
,他会执行 ==
检查,并判断两个 ListView
是一样的。没有任何更改,所以也就不需要更新。
推荐的高效且有效的创建一个列表的方法是使用 ListView.Builder。这个方法非常适用于动态列表或者拥有大量数据的列表。
如何为 Text Widget 设置自定义字体?
将字体文件放入一个文件夹,并在 pubspec.yaml
文件中引用它,就和导入图片一样。
如何更改 Text Widget 的样式?
Text
Widget 的样式参数接收一个 TextStyle
对象,你可以在这个对象里自定义很多参数,例如:
-
color
-
decoration
-
decorationColor
-
decorationStyle
-
fontFamily
-
fontSize
-
fontStyle
-
fontWeight
-
hashCode
-
height
-
inherit
-
letterSpacing
-
textBaseline
-
wordSpacing
如何使用 GPS 传感器?
如何使用相机?
如何使用 Facebook 登录?
如何使用 Firebase 的功能?
官方插件 提供了 Firebase 的大多数功能。这些插件都是由 Flutter 团队维护的官方集成插件:
-
firebase_admob
提供 Firebase AdMob 功能 -
firebase_analytics
提供 Firebase Analytics 功能 -
firebase_auth
提供 Firebase Auth 功能 -
firebase_database
提供 Firebase RTDB 功能 -
firebase_storage
提供 Firebase Cloud Storage 功能 -
firebase_messaging
提供 Firebase Messaging (FCM) 功能 -
flutter_firebase_ui
提供快速的 Firebase Auth 集成功能 (Facebook, Google, Twitter 和 email) -
cloud_firestore
提供 Firebase Cloud Firestore 功能
你可以在 Pub 网站上查找一些官方插件没有直接支持的功能的第三方 Firebase 插件。
如何创建自己的自定义原生集成插件?
如何在 Flutter 应用中使用 NDK?
推荐学习资料
-
Android进阶学习全套手册
-
Android对标阿里P7学习视频
-
BAT TMD大厂Android高频面试题
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
P7学习视频
[外链图片转存中…(img-iddoyLtk-1714274199348)]
- BAT TMD大厂Android高频面试题
[外链图片转存中…(img-rp4JjsiR-1714274199349)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!