Flutter for Anroid 走读

Views

  • Flutter中,Widget代替安卓的view的概念,并且任何东西都Widget。区别在于,Widget仅仅支持一帧,每一帧都会创建Widget实例树,相当于一次性绘制整个界面。Android中的View,在绘制结束之后不会重绘,除非使用invalidate方法
  • Flutter中的Widget分为有状态的(StatefulWidget)和无状态的(StatelessWidgets),更新一个Widget需要使用新建一个StatefulWidget和一个State对象配合使用
  • 布局方式只能通过布局树实现,不能像安卓样使用xml进行布局
  • Widget是不可变的,没有addChild等方法,所以可以通过一个方法动态返回不同的Widget实现布局中的添加或者删除组件的功能
  • Flutter中可以通过AnimationController和Animation(例如:CurvedAnimation)实现动画
  • 可以通过CustomPaint和CustomPainter替代安卓中的Canvas实现在屏幕上绘制自定义形状
  • 可以通过Widget的组合完成自定义控件(在安卓中是通过继承View)

Intents

  • Flutter中不存在Intents的概念,与Native的整合中需要用到Intents,另外就是调用外部组件,如Camera或者File picker。Native可以通过MethodChannel与Flutter完成数据通信
  • Flutter中,管理多个屏幕有两个核心概念和类:Route 和 Navigator。Route是应用程序的“屏幕”或“页面”的抽象(可以认为是Activity), Navigator是管理Route的Widget。Navigator可以通过push和pop route以实现页面切换
  • 处理Flutter中所有路由的Navigator类可用于从已经push到栈的路由中获取结果(实现安卓中的startActivityForResult)

异步UI

  • Dart是单线程执行模型,除非启动一个Isolate(在另外一个线程上运行Dart代码的方式),否则Dart代码将在UI线程中执行,并由事件循环驱动
  • Flutter是单线程的,运行一个事件循环,所以无法进行线程管理或者使用像安卓中AsyncTasks、IntentServices的功能。方法后面增加asyn标识,既可以使此方法异步执行(可以进行耗时操作,如网络请求)
loadData() async {
  String dataURL = "https://jsonplaceholder.typicode.com/posts";
  http.Response response = await http.get(dataURL);
  setState(() {
    widgets = JSON.decode(response.body);
  });
}
  • 可以通过Isolates执行耗时或计算密集型任务。是一个独立的线程,不能与主线程共享内存
  • 网络请求可以使用http包
  • 通过Progress Indicator widget实现进度指示器

项目结构

  • Flutter遵循像iOS这样简单的3种分辨率格式: 1x, 2x, and 3x(资源文件放到images中并且需要在pubspec.yaml中进行声明)
  • 字符串的存储的最好方式是新建一个Strings类,并且在里面存放static类型的string,然后通过Strings类引用字符
  • Flutter中通过pubspec.yaml来管理依赖(Android中是gradle)

Activities和Fragments

  • 在Flutter中Activity和Fragment都对应Widget的概念
  • Flutter中可以通过挂接到WidgetsBinding观察并监听didChangeAppLifecycleState更改事件来监听生命周期事件
生命周期事件是:
resumed - 应用程序可见并响应用户输入。这是来自Android的onResume
inactive - 应用程序处于非活动状态,并且未接收用户输入。此事件在Android上未使用,仅适用于iOS
paused - 应用程序当前对用户不可见,不响应用户输入,并在后台运行。这是来自Android的暂停
suspending - 该应用程序将暂时中止。这在iOS上未使用

Layouts

  • Flutter中可以通过Row和Column实现LinearLayout
  • 通过使用Column、Row和Stack的组合来实现RelativeLayout的效果
  • Flutter中Listview对应安卓中ScrollView、Listview。Flutter实现notifyDataSetChanged需要在setState中创建一个新的List(),并且将所有旧数据复制到新列表中
  • ListView.Builder相当于安卓中的RecyclerView
  • Text widget上设置自定义字体,需要将字体文件夹放到assets文件夹中,然后在pubspec.yaml中声名
  • Text的样式有一个对应TextStyle对象,可以在其中自定义许多参数
color
decoration
decorationColor
decorationStyle
fontFamily
fontSize
fontStyle
fontWeight
hashCode
height
inherit
letterSpacing
textBaseline
wordSpacing
  • 可以通过向Text Widget的装饰构造函数参数添加InputDecoration对象,完成输入框显示占位符文本。同样设置InputDecoration的errorText可以显示验证错误

手势检测和触摸事件处理

  • Flutter中可以通过Widget的onPressed事件完成点击事件的回调(setOnClickListener)
  • 如果Widget不支持事件监听,可以将改Widget包装到GestureDetector中,并处理onTap方法
  • GestureDetector支持的收拾
Tap:onTapDown、onTapUp、onTap、onTapCancel
Double tap:onDoubleTap
长按:onLongPress
垂直拖动:onVerticalDragStart、onVerticalDragUpdate、onVerticalDragEnd
水平拖拽:onHorizontalDragStart、onHorizontalDragUpdate、onHorizontalDragEnd

数据库与本地存储

  • 可以通过插件Shared_Preferences来完成对Shared Preferences的操作
  • 在Flutter中,您可以使用SQFlite插件来访问SQFlite此功能

参考:
https://flutterchina.club/flutter-for-android/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值