结论 先上结果,Flutter页面的生命周期: 一个常规的StatefulWidget的生命周期 page create -> page state create -> page state init -> page state didChangeDependencies -> page state build -> {history pages} bui...
Android如何调用so库 官方推荐使用NDK工具,通过CMake的方式创建动态库。不过,一些简单的库,也是可以直接使用命令行生成的。 android 默认使用clang编译C/C++。sdk中clang在:%ANDROID_SDK%\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin 使用clang生成动态库时,...
Flutter DataTable的bug 在使用原生控件DataTable时,会发现表内单元格的内容无法居中,单元格右侧会多出一段。这实际是DataTable的一个bug, DataTable的部分源码: class DataTable extends Stateless { //... Widget build(BuildContext c...
RenderObject markNeedsCompositingBitsUpdate() 主要变量 _needsCompositingBitsUpdate needsCompositing. 若为true, layer需要被创建,在绘制时进行图层合成 作用 将合成状态置为dirty, 也就是,needsCompositing变量需要被重新计算(重新计算时机是Pipel...
关于存储访问框架 存储访问框架(Storage Access Framework),是Google在Andorid 4.4引入的。通过它,用户可以轻松的浏览并打开文档、图像以及其他文件。 SAF包含以下内容: 文档提供程序 — 一种内容提供程序,可让存储服务(如 Google Drive)显示其管理的文件。文档提供程序以 DocumentsProvider 类的子类形式实现。文档...
Mysql本身支持多个数据库之间的Master-slave架构,具体步骤是: 1. 配置master的my.cnf 在[mysqld]下增加: # 在一个主从架构中,server_id要唯一 server_id=100 # 设置需要同步的数据库。多个数据库用“,”隔开。 binlog-do-db=dbname1, dbname2 # 设置不需要同步的数据库 # 若两个都不设置,默认同步...
什么是协程 协程(Coroutine),本质上是更轻量级的线程。在一个线程上可以同时跑多个协程。与线程相比,它更轻量、资源占用更少。 suspend关键字 suspend关键字修饰方法,标识它是suspend function。suspend function有两个特点: 该方法只能在协程中被调用 该方法体内可以调用其他suspend方法 像delay方法就是suspe...
蓝牙的简单知识 蓝牙,根据不同的版本,可以分成: 经典蓝牙,蓝牙版本2.1 高速蓝牙,蓝牙版本3.0 低功耗蓝牙,蓝牙版本4.0 最普及的,也是人们认知的蓝牙,一般是经典蓝牙。高速蓝牙,是在经典蓝牙的基础上,提升了传输速率。而低功耗蓝牙,区别于经典蓝牙,最大的特点是低功耗,副作用是传输速率慢。 今天的主题是低功耗蓝牙(Bluetooth Low Energy),简称B...
pub_server 官方有开源一个私有仓库项目: pub_server。它可以帮助我们在本地起一个私有仓库服务。具体的命令可以查看该项目说明。 但为了能够一劳永逸,可以把它做成Docker镜像。Github上已经有人实现了这种方式:simple_pub_server。 simple_pub_server 该项目将pub_server做成了镜像,提供了一份docker-compo...
混合编程的例子 在Flutter中,通过MethodChannel与原生通讯的。当创建一个插件项目时,生成的项目会自带MethodChannel的例子。 可以用Android Stuido创建一个插件项目,或者使用命令行创建: flutter create --template=plugin -i swift -a kotlin hybrid_plugin 当项目创建完,可以看到生...
A new version of content is available.