Flutter 与 Android 差异

目录

Views

1.widget与view

2.如何更新widget

3.如何布局? XML layout 文件跑哪去了?

4.如何在布局中添加或删除组件

5.在Android中,可以通过View.animate()对视图进行动画处理,那在Flutter中怎样才能对Widget进行处理

6.如何使用Canvas draw/paint

7.如何构建自定义 Widgets

Intents

1.Intent在Flutter中等价于什么?

2.如何在Flutter中处理来自外部应用程序传入的Intents

3.startActivityForResult 在Flutter中等价于什么

异步UI

1.runOnUiThread 在Flutter中等价于什么

2.AsyncTask和IntentService在Flutter中等价于什么

3.OkHttp在Flutter中等价于什么

4.如何在Flutter中显示进度指示器

项目结构和资源

1.在哪里存储分辨率相关的图片文件? HDPI/XXHDPI

2.在哪里存储字符串? 如何存储不同的语言

3.Android Gradle vs Flutter pubspec.yaml

Activities 和 Fragments

1.Activity和Fragment 在Flutter中等价于什么

2.如何监听Android Activity生命周期事件

Layouts

1.LinearLayout在Flutter中相当于什么

2.RelativeLayout在Flutter中等价于什么

3.ScrollView在Flutter中等价于什么

手势检测和触摸事件处理

1.如何将一个onClick监听器添加到Flutter中的widget

2.如何处理widget上的其他手势

Listview & Adapter

1.ListView在Flutter中相当于什么

2.怎么知道哪个列表项被点击

3.如何动态更新ListView

使用 Text

1.如何在 Text widget上设置自定义字体

2.如何在Text上定义样式

表单输入

1.Input的”hint”在flutter中相当于什么

2.如何显示验证错误

Flutter 插件

1.如何使用 GPS sensor

2.如何访问相机

3.如何使用Facebook登陆

4.如何构建自定义集成Native功能

5.如何在我的Flutter应用程序中使用NDK

主题

1.如何构建Material主题风格的app

数据库和本地存储

1.如何在Flutter中访问Shared Preferences ?

2.如何在Flutter中访问SQLite

通知

如何设置推送通知


Views

1.widget与view

与View相比,Widget有一些不同之处。 首先,Widget仅支持一帧,并且在每一帧上,Flutter的框架都会创建一个Widget实例树(译者语:相当于一次性绘制整个界面)。 相比之下,在Android上View绘制结束后,就不会重绘,直到调用invalidate时才会重绘。

与Android的视图层次系统不同(在framework改变视图),而在Flutter中的widget是不可变的,这允许widget变得超级轻量

2.如何更新widget

在Android中,您可以通过直接对view进行改变来更新视图。然而,在Flutter中Widget是不可变的,不会直接更新,而必须使用Widget的状态。

StatefulWidget与Stateless Widget每一帧它们都会重新构建,不同之处在于StatefulWidget有一个State对象,它可以跨帧存储状态数据并恢复它

那么要记住这个规则:如果一个widget发生了变化(例如用户与它交互),它就是有状态的。但是,如果一个子widget对变化做出反应,而其父widget对变化没有反应,那么包含的父widget仍然可以是无状态的widget。

3.如何布局? XML layout 文件跑哪去了?

在Android中,您通过XML编写布局,但在Flutter中,您可以使用widget树来编写布局。

4.如何在布局中添加或删除组件

在Android中,您可以从父级控件调用addChild或removeChild以动态添加或删除View。 在Flutter中,因为widget是不可变的,所以没有addChild。相反,您可以传入一个函数,该函数返回一个widget给父项,并通过布尔值控制该widget的创建。

5.在Android中,可以通过View.animate()对视图进行动画处理,那在Flutter中怎样才能对Widget进行处理

在Flutter中,可以通过动画库给widget添加动画。

在Android中,您可以通过XML创建动画或在视图上调用.animate()。

6.如何使用Canvas draw/paint

在Android中,您可以使用Canvas在屏幕上绘制自定义形状。

Flutter有两个类可以帮助您绘制画布,CustomPaint和CustomPainter,它们实现您的算法以绘制到画布。

7.如何构建自定义 Widgets

在Android中,您通常会继承View或已经存在的某个控件,然后覆盖其绘制方法来实现自定义View。

在Flutter中,一个自定义widget通常是通过组合其它widget来实现的,而不是继承。

Intents

1.Intent在Flutter中等价于什么?

在Android中,Intents主要有两种使用场景:在Activity之间切换,以及调用外部组件。 Flutter不具有Intents的概念,但如果需要的话,Flutter可以通过Native整合来触发Intents(调用外部组件)

要在Flutter中切换屏幕,您可以访问路由以绘制新的Widget。 管理多个屏幕有两个核心概念和类:Route 和 Navigator。Route是应用程序的“屏幕”或“页面”的抽象(可以认为是Activity), Navigator是管理Route的Widget。Navigator可以通过push和pop route以实现页面切换。

和Android相似,您可以在AndroidManifest.xml中声明您的Activities,在Flutter中,您可以将具有指定Route的Map传递到顶层MaterialApp实例

2.如何在Flutter中处理来自外部应用程序传入的Intents

Flutter可以通过直接与Android层通信并请求共享的数据来处理来自Android的Intents

在这个例子中,我们注册文本共享intent,所以其他应用程序可以共享文本到我们的Flutter应用程序

这个应用程序的基本流程是我们首先处理Android端的共享文本数据,然后等待Flutter请求数据,然后通过MethodChannel发送。

3.startActivityForResult 在Flutter中等价于什么

处理Flutter中所有路由的Navigator类可用于从已经push到栈的路由中获取结果。 这可以通过等待push返回的Future来完成。

异步UI

1.runOnUiThread 在Flutter中等价于什么

Dart是单线程执行模型,支持Isolates(在另一个线程上运行Dart代码的方式)、事件循环和异步编程。 除非您启动一个Isolate,否则您的Dart代码将在主UI线程中运行,并由事件循环驱动(译者语:和JavaScript一样)。

例如,您可以在UI线程上运行网络请求代码而不会导致UI挂起(译者语:因为网络请求是异步的)

要更新UI,您可以调用setState,这会触发build方法再次运行并更新数据

2.AsyncTask和IntentService在Flutter中等价于什么

在Android中,当你想访问一个网络资源时,你通常会创建一个AsyncTask,它将在UI线程之外运行代码来防止你的UI被阻塞。 AsyncTask有一个线程池,可以为你管理线程。

由于Flutter是单线程的,运行一个事件循环(如Node.js),所以您不必担心线程管理或者使用AsyncTasks、IntentServices。

要异步运行代码,可以将函数声明为异步函数,并在该函数中等待这个耗时任务

在Android上,当您继承AsyncTask时,通常会覆盖3个方法,OnPreExecute、doInBackground和onPostExecute。 在Flutter中没有这种模式的等价物,因为您只需等待一个长时间运行的函数,而Dart的事件循环将负责其余的事情。

但是,有时您可能需要处理大量数据,导致UI可能会挂起。

在这种情况下,与AsyncTask一样,在Flutter中,可以利用多个CPU内核来执行耗时或计算密集型任务。这是通过使用Isolates来完成的

是一个独立的执行线程,它运行时不会与主线程共享任何内存。这意味着你不能从该线程访问变量或通过调用setState来更新你的UI

3.OkHttp在Flutter中等价于什么

当使用受欢迎的“http”package时,Flutter进行网络信非常简单。

虽然“http” package 没有实现OkHttp的所有功能,但“http” package 抽象出了许多常用的API,可以简单有效的发起网络请求。

https://pub.dartlang.org/packages/http

您可以通过在pubspec.yaml中添加依赖项来使用它

4.如何在Flutter中显示进度指示器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值