Learn Flutter Based on Android

  • 在Android中,addChild和removeChild动态添加或删除View。 在Flutter中,因为widget是不可变的,所以没有addChild。可以传入一个函数,该函数返回一个widget给父项,并通过布尔值控制该widget的创建。【转变开发思维】

  • 在Android中,通常在继承View的基础上去自定义View。在Flutter中,一个自定义widget通常是通过组合其它widget来实现的,而不是继承。

  • 在Android中,Intent。在Flutter中,Router 和 Navigator。

 Navigator.of(context).pushNamed('/b'); 
  • 在Android中,在AndroidManifest.xml中声明Activities,在Flutter中,将具有指定Route的Map传递到顶层MaterialApp实例。

  • startActivityForResult,在Flutter中通过等待push返回的Future来完成。

// 等待上一个页面返回数据
Map coordinates = await Navigator.of(context).pushNamed('/location');

// 回到上一级页面,并携带数据
Navigator.of(context).pop({"lat":43.821757,"long":-79.226392});

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

  • Flutter中的异步:使用async + await,使用setState更新UI,这会触发build方法再次运行并更新数据。【flutter中异步是针对一个函数而言】

  • Isolates ???

  • 网络请求

// 再调用数据bean封装
loadData() async {
    String dataURL = "https://jsonplaceholder.typicode.com/posts";
    http.Response response = await http.get(dataURL);
    setState(() {
      widgets = JSON.decode(response.body);
    });
  }
  • 分辨率icon的处理
    Flutter遵循像iOS这样简单的3种分辨率格式: 1x, 2x, and 3x。创建一个名为images的文件夹,并为每个图像文件生成一个@2x和@3x文件,如下:
    …/my_icon.png
    …/2.0x/my_icon.png
    …/3.0x/my_icon.png
    需要在asset中声明:
assets:
 - images/a_dot_burr.jpeg
 - images/a_dot_ham.jpeg

使用图片:return new AssetImage("images/a_dot_burr.jpeg");

  • 生命周期 WidgetsBindingObserver

  • LinearLayout 等价于 Row 和 Co​​lumn

  • RelativeLayout 可以使用 Column、Row和Stack组合实现

-Flutter中滑动控件全部使用ListView

  • Flutter点击事件:两种方法
    1、Widget支持事件监听,直接设置onPressed: () { }
    2、Widget不支持事件监听,包装到GestureDetector中,再设置onTap: () { }
    GestureDetector还可以设置onTapUp、onTapDown、双击、长按、水平|垂直拖拽

  • Android中的Adapter,Flutter中只需要简单的构件List,传给ListView: children即可,Flutter将负责确保它们快速平滑地滚动。Flutter如何给每个item添加点击事件呢?就是给每个item添加GestureDetector监听。Adapter类似于itemBuilder

你可能感兴趣的:(Learn Flutter Based on Android)