zm.blog

select * from learn


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

Flutter cached_network_image 图片加载流程分析

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

使用

组件CachedNetworkImage可以支持直接使用或者通过ImageProvider。

引入依赖

1
2
dependencies:
cached_network_image: ^3.1.0

执行flutter pub get,项目中使用

Import it

1
import 'package:cached_network_image/cached_network_image.dart';

添加占位图

1
2
3
4
5
CachedNetworkImage(
imageUrl: "http://via.placeholder.com/350x150",
placeholder: (context, url) => CircularProgressIndicator(),
errorWidget: (context, url, error) => Icon(Icons.error),
),

进度条展示

1
2
3
4
5
6
CachedNetworkImage(
imageUrl: "http://via.placeholder.com/350x150",
progressIndicatorBuilder: (context, url, downloadProgress) =>
CircularProgressIndicator(value: downloadProgress.progress),
errorWidget: (context, url, error) => Icon(Icons.error),
),
阅读全文 »

北京环球影城游玩攻略

发表于 2021-09-23 | 分类于 随笔记 | | 阅读次数:
阅读全文 »

《批判性思维》随笔记

发表于 2021-09-11 | 分类于 随笔记 | | 阅读次数:

Why?

然而在这样一个信息过载的时代里,形形色色的声音与观点鱼龙混杂。生活在信息洪流中的我们,应该如何避免随波逐流,做到真正的独立思考?

或许可以了解一下“CriticalThinking”——「批判性思维」。

What?

批判性思维是以一种合理的、反思的、心灵开放的方式进行思考,从而能够清晰准确地表达、逻辑严谨地推理、合理地论证,以及培养思辨精神。

在批判性思维的情感倾向方面,科南特(J.Kurland)于1995年提出:批判性思维与过分情感主义、智力懒惰和封闭思维相反,它关注证据、智力、诚实和开放思维。因此批判性思维强调依靠证据而非情感,全面考虑各种可能的观点和解释,警惕个人动机和偏见的影响,更关注寻求真理,不拒绝非流行的观点,意识到自己的偏见、歧视,自觉避免或减少这些偏见对判断的影响。此外,具有批判性思维并不意味着总是对任何人和任何事持否定态度和吹毛求疵,批判精神意味着敏锐的思维、好奇的探究、对推理的热情、对可靠信息的渴望。

阅读全文 »

Flutter 2.5 重大改版发布

发表于 2021-09-10 | 分类于 Android , Flutter Tips | | 阅读次数:

原文链接 medium.com/flutter/wha…

Flutter 2.5 是 Flutter 版本历史上排名第二的大版本更新,该版本:

  • 关闭了 4600 个 issues;
  • 合并了 252 contributors 和 216 reviewers 的 3932 个 PR;

回顾过去一年,可以看到有 1337 位 contributors 创建了 21,072 个 PR 这样庞大的数据,其中有15,172 个被合并。

事实上该版本依然是对性能和开发工具进行了改进,同时还有增加许多新功能,包括:

  • 对 Android 的全屏支持、更多 Material You(也称为 v3)支持;
  • 更新文本编辑功能以支持可切换的键盘快捷键;
  • Widget Inspector 可查阅更多详细信息;
  • Visual Studio Code 项目中对添加依赖项增加新的支持;
  • IntelliJ/Android Studio 中新增测试运行获取覆盖率信息;
  • 一个全新的应用程序模板,为 Flutter 应用程序提供更好的开发基础;
阅读全文 »

能量层级(正/负)

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

hhh.png

阅读全文 »

GooglePlay新增付款功能一览表

发表于 2021-06-10 | 分类于 Android , Android Tips | | 阅读次数:

随着移动行业全球化,Google Play 也陆续加入各种不同的付款方式,让用户可以选择喜好的付款方式。请注意,Google Play 帐号的国家/地区设置会影响能选择的付款方式。

如果要更改国家/地区,您需要在 Google Play 中设置一个新的国家/地区。要设置新的国家/地区,用户必须位于相应国家/地区,并且在新的国家/地区有受支持的付款方式。

请注意:

  • 您每年只能更改一次 Play 国家/地区设置。因此,如果您更改国家/地区,则在 1 年之内无法改回之前的国家/地区。
  • 您更改国家/地区后,将无法在新的国家/地区使用您在之前的国家/地区拥有的 Google Play 余额。
  • 您可能会无法再享用某些图书、电影、电视节目、游戏和应用。

以下列举 Google Play 中部分采用中文语言的国家/地区常用的付款方式:

阅读全文 »

Android12上全新的应用启动画面

发表于 2021-05-18 | 分类于 Android , Android Tips | | 阅读次数:

早期的Android上App的启动速度常为人诟病,如今的启动表现已不逊iOS。Google针对系统的不断优化绝对功不可没,从8.0独立出来的SplashWindow,到12上推出的全新SplashScreen。

在App的主要内容展示之前,按照需求的不同,或多或少会先展示这样几个画面。

画面 用途
Splash Screen 展示品牌Logo或Slogan
Advertisement Screen 展示节日活动或日常广告
Guide Screen 演示重点功能,一般只展示一次

启动过程示意图

阅读全文 »

代码实例展示Java和Kotlin有哪些区别

发表于 2021-05-17 | 分类于 Android , Kotlin | | 阅读次数:

自从谷歌 I/O 2017宣布将支持 Kotlin 作为 Android 开发的 First-Class 语言,相信各位程序员的朋友圈都被Kotlin的消息轰炸了吧,支持Java的“守旧派”认为Java将稳坐霸主地位不动摇,支持Kotlin的“维新派”认为Kotlin很可能会把Java拉下马。其实,笔者认为新语言的出现对于程序员来说并不是一件新鲜事儿,程序员始终践行着“活到老,学到老”,真正能够对程序员产生影响的新语言的使用和性能。

易用性。

  1. 在语法糖的加持下,kotlin能够用更短的代码实现更多的功能。这是java 无法比拟的。所谓代码量越少,出bug的可能性就越低。
  2. kotlin特有的扩展属性,不再需要java工具类,对开发更加友好。
    比如我们想实现字符串判空操作,在java中需要写一个StringUtil类,这样其他开发同学想实现该功能的时候,可能并不知道已经有人实现了该功能,存在重复造轮子的可能。通过扩展属性,我们可以很方便的看出String类都存在哪些方法。
  3. java中的bean类总是需要使用插件生成setter getter方法。kotlin中的data关键字可以解决这类问题,data类在编译期自动生成getter setter方法。

规范性。

工程项目都是需要指定开发规范的。比如变量命名等。在java中,方法重载的时候会生成@Override注解,但是这并不是强制约束的。kotlin的方法采用override关键字进行了强制约束。
再比如TODO。java中的TODO是以注释的形式存在,即使没有实现TODO处的代码,也没什么运行时问题。kotlin的TODO形式如下:

1
2
3
fun main(args: Array<String>) {
TODO()
}

kotlin TODO的实现

1
2
@kotlin.internal.InlineOnly
public inline fun TODO(): Nothing = throw NotImplementedError()

可以看到运行时会抛出异常。
思考:这里为什么不在编译期抛出异常呢?

安全性。

java中虽然有@Nullable @NotNull等注解。但是不会在编译期起作用,而是在运行期抛出异常。kotlin在声明变量的时候,可以指定变量是否为空,调用可为空对象时,需要进行空判断。

跨平台。

java在jvm的协助下虽然也是跨平台语言,但是不能像kotlin一样可以既可以编译成class字节码,又可以编译成js。

编译速度。

只有全量编译下,kotlin比java慢。增量编译下,两者几乎没有差距。

其他kotlin特性。

懒加载、高阶函数、协程、inline操作符、运算符重载、默认参数等。

GitHub 用户amitshekhariitbhu在GitHub上贴图分享了Java和Kotlin的语法区别,下面我们就一起来看一下吧!

阅读全文 »

Android Branch deferred deep link 深度链接

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

Branch 实现Android端 deferred deep link

官网sdk文档地址:https://docs.branch.io/apps/android/
1. Configure Branch(配置Branch)
用户设备未安装app,跳转至某一下载链接
用户未安装app,跳转至Google Play时

阅读全文 »

Android Jetpack ViewModel

发表于 2020-10-19 | 分类于 Android , Jetpack | | 阅读次数:

官方文档

ViewModel概览

ViewModel类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel类让数据可在发生屏幕旋转等配置更改后继续存在。

Android 框架可以管理界面控制器(如 Activity 和 Fragment)的生命周期。Android 框架可能会决定销毁或重新创建界面控制器,以响应完全不受您控制的某些用户操作或设备事件。

如果系统销毁或重新创建界面控制器,则存储在其中的任何临时性界面相关数据都会丢失。例如,应用的某个 Activity 中可能包含用户列表。因配置更改而重新创建 Activity 后,新 Activity 必须重新提取用户列表。对于简单的数据,Activity 可以使用 onSaveInstanceState() 方法从 onCreate() 中的捆绑包恢复其数据,但此方法仅适合可以序列化再反序列化的少量数据,而不适合数量可能较大的数据,如用户列表或位图。

另一个问题是,界面控制器经常需要进行异步调用,这些调用可能需要一些时间才能返回结果。界面控制器需要管理这些调用,并确保系统在其销毁后清理这些调用以避免潜在的内存泄露。此项管理需要大量的维护工作,并且在因配置更改而重新创建对象的情况下,会造成资源的浪费,因为对象可能需要重新发出已经发出过的调用。

诸如 Activity 和 Fragment 之类的界面控制器主要用于显示界面数据、对用户操作做出响应或处理操作系统通信(如权限请求)。如果要求界面控制器也负责从数据库或网络加载数据,那么会使类越发膨胀。为界面控制器分配过多的责任可能会导致单个类尝试自己处理应用的所有工作,而不是将工作委托给其他类。以这种方式为界面控制器分配过多的责任也会大大增加测试的难度。

从界面控制器逻辑中分离出视图数据所有权的做法更易行且更高效。

阅读全文 »
1234…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
本站访客数 人次 本站总访问量 次