zm.blog

select * from learn


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

Dart语法学习

发表于 2019-05-21 | 分类于 Android , Dart | | 阅读次数:

目录

  • 参考资料
  • 语言特性
  • 关键字
  • 变量与常量
  • 数据类型
  • 运算符 operators
  • 控制流程语句
  • 异常 Exceptions
  • 函数 Function
  • 类 Class
  • 类-方法
  • 类-抽象类
  • 类-隐式接口
  • 类-扩展一个类(重写)
  • 库和可见性
  • 异步支持

参考资料

  • https://www.dartlang.org/guides/language/language-tour 【官方文档】
  • http://wiki.jikexueyuan.com/project/dart-language-tour/classes.html 【极客学院】
  • https://www.jianshu.com/p/3d927a7bf020 【author:AWeiLoveAndroid】
  • https://www.jianshu.com/p/a7cc623132b0 【author:soojade】
  • https://www.jianshu.com/p/78d317b2ea79 【author:优腾爱乐】

语言特性

  • Dart所有的东西都是对象, 即使是数字numbers、函数function、null也都是对象,所有的对象都继承自Object类。
  • Dart动态类型语言, 尽量给变量定义一个类型,会更安全,没有显示定义类型的变量在 debug 模式下会类型会是 dynamic(动态的)。
  • Dart 在 running 之前解析你的所有代码,指定数据类型和编译时的常量,可以提高运行速度。
  • Dart中的类和接口是统一的,类即接口,你可以继承一个类,也可以实现一个类(接口),自然也包含了良好的面向对象和并发编程的支持。
  • Dart 提供了顶级函数(如:main())。
  • Dart 没有 public、private、protected 这些关键字,变量名以”_”开头意味着对它的 lib 是私有的。
  • 没有初始化的变量都会被赋予默认值 null。
  • final的值只能被设定一次。const 是一个编译时的常量,可以通过 const 来创建常量值,var c=const[];,这里 c 还是一个变量,只是被赋值了一个常量值,它还是可以赋其它值。实例变量可以是 final,但不能是 const。
  • 编程语言并不是孤立存在的,Dart也是这样,他由语言规范、虚拟机、类库和工具等组成:
    • SDK:SDK 包含 Dart VM、dart2js、Pub、库和工具。
    • Dartium:内嵌 Dart VM 的 Chromium ,可以在浏览器中直接执行 dart 代码。
    • Dart2js:将 Dart 代码编译为 JavaScript 的工具。
    • Dart Editor:基于 Eclipse 的全功能 IDE,并包含以上所有工具。支持代码补全、代码导航、快速修正、重构、调试等功能。
阅读全文 »

从setContentView入口,全方位分析LayoutInflater

发表于 2019-05-12 | 分类于 Android , 源码解析 | | 阅读次数:

LayoutInflater 介绍

在 Android 中 LayoutInflater 是扮演着很重要的角色,很多时候我们忽略了它的重要性,因为它的重要性完 全被隐藏起来了,可以说是直接隐藏在了Activity , Fragment 等组件的光环之下了。

from(mContext) 源码解析

在 Android 系统中,我们经常以 Context 获取系统级别的服务,比如 AMS, WMS, LayoutInfoater 等,这些服务会在合适的时候注册在系统中,在我们需要的时候 getSS(String name) 通过系统的名字来获取。我们先来看一段代码:

这里我就拿 Activity setContentView() 举例

1
2
3
4
@Override
public void setContentView(@LayoutRes int layoutResID) {
getDelegate().setContentView(layoutResID);
}

继续跟下去:

1
2
3
4
/**
* Should be called instead of {@link Activity#setContentView(int)}}
*/
public abstract void setContentView(@LayoutRes int resId);

跟下去发现是一个抽象类,我们找它的实现类:

1
2
3
4
5
6
7
8
9
@Override
public void setContentView(int resId) {
ensureSubDecor();
ViewGroup contentParent = (ViewGroup) mSubDecor.findViewById(android.R.id.content);
contentParent.removeAllViews();
//通过 LayoutInflater 加载 XML id
LayoutInflater.from(mContext).inflate(resId, contentParent);
mOriginalWindowCallback.onContentChanged();
}
阅读全文 »

Flutter “保姆”级项目 Demo合集

发表于 2019-05-12 | 分类于 Android , Flutter | | 阅读次数:

为啥叫“保姆”级项目,因为是真的贴心…

flutter go

https://github.com/alibaba/flutter-go

阅读全文 »

CEO、CFO、CTO、CIO、COO、CHO、CMO、COO等你都知道是什么吗?

发表于 2019-05-06 | 分类于 随笔记 | | 阅读次数:

CAO

Chief Administrative Officer 首席行政官(Chief Art Officer 首席艺术官)
释义:顾名思义,首席行政官是在一个企业中负责日常事务的最高行政官员,也是企业里的行政部门长官。
÷首席艺术官多数出现在文化娱乐企业中。

CBO

Chief Brand Officer 首席品牌官
释义:它是现代组织(包括企业、政府或其他组织)中设置的专门负责品牌战略管理与运营的高级官员,代表CEO就企业形象、品牌以及文化进行内外部沟通。CBO不仅是一种专业人才,更是一种特殊人才。因为他不再仅仅是一个传播者,更是一个企业价值设计的参与者和企业品牌资产经营的责任者。首席品牌官按照国际惯例是由企业副总裁级领导担任,因此在国外,首席品牌官的薪酬少则数十万美元,多则上百万、甚至数百万美元。

CCO

Chief Cultural Officer 首席文化(知识)官
释义:企业文化也是生产力,这点在中国目前的企业估计很少有人反对,而首席文化官当仁不让的主要职能就是架构最有效率的企业文化。国内已经出现了首批企业首席文化官,而根据中国企业文化促进会会长张光照的定义,CCO在企业中的主要职能就是统筹全局制定企业文化建设的规划,帮助员工树立起企业的核心价值观念。

阅读全文 »

FlutterPlugin开发流程

发表于 2019-04-29 | 分类于 Android , Flutter | | 阅读次数:

这篇文章主要介绍了Flutter Plugin开发流程,包括如何利用Android Studio开发以及发布等。

今天这篇文章,给大家介绍如何开发Flutter Plugin中Android的部分。有关Flutter以及Flutter Plugin的概念,感兴趣的可以从官网查看相关资料。

简介

笔者的环境是Mac下Android Studio进行的开发,AS也是谷歌官推的,安装flutter插件后,开发起来相对于其他IDE来说,方便很多,自带了三种模板:

  • Flutter Application: Flutter应用
  • Flutter Plugin:Flutter插件
  • Flutter Package:纯Dart组件

Plugin其实就是一个特殊的Package。Flutter Plugin提供Android或者iOS的底层封装,在Flutter层提供组件功能,使Flutter可以较方便的调取Native的模块。很多平台相关性或者对于Flutter实现起来比较复杂的部分,都可以封装成Plugin。其原理如下

消息在client和host之间通过平台通道(platform channels)来进行的,之间的通讯都是异步的。

阅读全文 »

Flutter与Android的交互

发表于 2019-04-29 | 分类于 Android , Flutter | | 阅读次数:

Flutter 说到底只是一个 UI 框架,很多功能都需要通过原生的 Api 来实现,那么就会涉及到 Flutter 和 Native 的交互,因为本人不懂 iOS 开发,所以只能讲下 Flutter 同 Android 的交互。

Android 项目配置 Flutter 依赖

既然是互相交互,那么需要准备一个 Android 项目。接着就需要创建 flutter module,让 Android 项目依赖,创建的方法可以参考官网 Flutter Wiki,虽然是官网提供的方法,但是完全按照这个步骤来,还是会有坑的,这边就慢慢一步步解决坑。

如果你用的是 Android Studio 进行开发的话,直接打开底部的 Terminal,直接创建 flutter module 依赖

flutter create -t module flutter_native_contact 至于 module 名可以随意填写,module 创建完后结构大概是这样的

阅读全文 »

Flutter入门指南(十四)之实战

发表于 2019-04-28 | 分类于 Android , Flutter | | 阅读次数:

讲完了常用的部件和网络请求后,差不多该进入整体实战了,这里我们将写一个比较熟悉的项目,郭神的 cool weather。项目将使用 fluro 实现路由管理,dio 实现网络请求,rxdart 实现 BLoC 进行状态管理和逻辑分离,使用文件,shared_preferences,sqflite 实现本地的数据持久化。这边先给出项目的地址:flutter_weather,以及最后实现的效果图:

One Two Three
阅读全文 »

Flutter入门指南(十三)之网络

发表于 2019-04-28 | 分类于 Android , Flutter | | 阅读次数:

前面讲完了常用的部件,BLoC 模式,数据持久化等常用的,今天再介绍个重头戏 —— 网络请求

HttpClient

HttpClient 是 dart 自带的网络请求方式,在 dart:io 包下。使用 HttpClient 作为请求分以下几个步骤

  1. 创建 HttpClient 实例

    1
    HttpClient client = HttpClient();
  2. 打开连接,并设置一些头参数,请求参数等

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // 如果 url 中没有查询参数可直接创建
    Uri uri = Uri.parse('https://www.xxx.com');
    // 如果存在查询参数则在 Uri 中添加
    Uri uri = Uri(scheme: 'https', host: 'www.xxx.com', queryParameters: {'a': 'AAA'});
    // 打开连接
    HttpClientRequest request = await client.getUrl(uri);
    request.headers.add('token', 'Bear ${'x' * 20}'); // 添加头部 token 信息
    // 如果是 post 或者 put 请求,通过 `add` 添加请求体
    // 因为 `add` 方法需要传入 `List<int>` 参数,可以通过 utf8.encode 进行编码
    request.add(utf8.encode('{"a": "aaa"}'));
    // 也可以通过添加流的方式进行添加
    request.addStream(input);
  3. 连接服务器

    1
    2
    3
    // 设置 request 后通过 request.close() 获取一个响应对象 HttpClientResponse,
    // 包括响应头,响应内容等
    HttpClientResponse response = await request.close();
  4. 读取服务器响应内容

    1
    String responseBody = await response.transform(utf8.decoder).join();
  5. 关闭实例

    1
    client.close();
阅读全文 »

Flutter入门指南(十二)之数据持久化

发表于 2019-04-28 | 分类于 Android , Flutter | | 阅读次数:

上节讲了状态管理,但是当 App 重启后,数据就都丢失了,这样就比较尴尬了,什么都要重来,所以这节我们来讲下数据持久化。数据持久化主要有如下方式

  • 文件读写
  • shared_preferences 存储
  • 数据库存储

持久化的实现都需要通过三方插件来实现,接着会慢慢介绍三种实现方式

阅读全文 »

Flutter入门指南(十一)之状态管理,BLoC

发表于 2019-04-27 | 分类于 Android , Flutter | | 阅读次数:

Stream

在 dart 部分记得分享过 Stream 的文章链接,但是我知道你们肯定没几个愿意看的,所以这里再提下。还是得从源码开始…因为源码的注释比较长,就不贴注释了,可以自己看,我这边就提取一些关键信息。

Stream 是 Dart 提供的一种数据流订阅管理的”工具”,感觉有点像 Android 中的 EventBus 或者 RxBus,Stream 可以接收任何对象,包括是另外一个 Stream,接收的对象通过 StreamController 的 sink 进行添加,然后通过 StreamController 发送给 Stream,通过 listen 进行监听,listen 会返回一个 StreamSubscription 对象,StreamSubscription 可以操作对数据流的监听,例如 pause,resume,cancel 等。

Stream 分两种类型:

  1. Single-subscription Stream:单订阅 stream,整个生命周期只允许有一个监听,如果该监听 cancel 了,也不能再添加另一个监听,而且只有当有监听了,才会发送数据,主要用于文件 IO 流的读取等。
  2. Broadcast Stream:广播订阅 stream,允许有多个监听,当添加了监听后,如果流中有数据存在就可以监听到数据,这种类型,不管是否有监听,只要有数据就会发送,用于需要多个监听的情况。
阅读全文 »
1…141516…38
ZhangMiao

ZhangMiao

Android/Flutter Developer

379 日志
58 分类
143 标签
RSS
E-Mail QQ Github StackOverflow
友情链接
  • Kaisir
  • Liujianhui
  • Leo
  • Hongyang
  • Liuwangshu
  • Jspang
  • Blankj
  • WuXiaoLong
  • Molunerfinn
  • Ofind
  • Gcssloop
© 2024 ZhangMiao
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
本站访客数 人次 本站总访问量 次