当前 Flutter 对桌面开发环境的支持正在开发中.
macOSmacOS 是当前最成熟的桌面开发平台(仅 flutter 而言),已经进入 alpha 阶段.
WindowsWindows shell 处于 technical preview.当前是基于 Win32 的,但计划后续探索 UWP 支持.注意:最终定型版本的 API 可能和当前有明显差异.
Linux当前 Linux shell 仅仅是 GLFW 的替代品,来探索 Linux 桌面实现,未来可能会被替换成其他实现.将来你的应用无论是使用 GTK+,Qt,WxWidgets,Motif 或其他任意开发工具套件都可以通过 Flutter 来创建 library,但是当前还没想好如何规划.当前计划先无条件支持 GTK+,然后慢慢支持其他.
命令create当前,只有 macOS 支持flutter create.对于 Windows 和 Linux,推荐参考 flutter-desktop-embedding project.
覆盖目标平台大部分应用需要覆盖支持的应用平台对应的值,否则会出现Unknown platform ...
从 Kotlin M5.1 之后不再支持函数参数可变(var).
123fun foo(var x: Int) { x = 5}
主要是这回导致歧义:可能认为传递的是引用参数(此特性不支持,需要在 runtime 修改).另一个原因是主构造函数:主构造函数使用 val 或 var声明不同性质的属性,而普通函数却不需要这样的功能.同时可变参数可不是一个好习惯,所以在函数支持可变参数或for-loop块都不再支持.
origin
Flutter engineFlutter Engine 不创建或管理线程,相应的由 embedder 创建管理、message loops.
embedder 提供了 task runner 来执行任务.
Dart VM 会有自己的线程池.而 Flutter engine 和 embedder 都无法访问到线程池的线程.
Task Runner ConfigurationFlutter engine 会向 embedder 申请4个 task runner 引用. engine 不在乎引用是不是同一个 task runner,或者多个 task runner 运行在同一个线程中.为了优化性能, embedder 应该为每个 task runner 分配一个单独的线程.虽然 engine 不关心 task runner 运行的线程情况,但是在 engine 的整个生命周期中线程配置应该保持一致.也就是如果 embedder 为task runner 分配了一个单独的线程,那么直到 engine 销毁,这个 task runner 都只能在这个线程运行.常用的 task runner ...
build-tool
使用 build_runner 作为开发服务1、在 pubspec.yaml中添加build_runner和build_web_compilers
12345environment: sdk: '>=2.0.0 <3.0.0'dev_dependencies: build_runner: ^1.0.0 build_web_compilers: ^0.4.0
2、下载依赖
1pub get
3、启动服务
1pub run build_runner serve
服务启动后,每次保存操作都会触发重新构建.
创建输出文件夹使用--output <directory name>选项构建,将内部引用 URL 匹配的文件路径和directory name合并作为输出目录,将文件写入.此选项可以在build,watch,serve命令中使用.如果没有使用 serve命令时,此目录同时被另一个不同的 server 使用.如果只想输出包的一部分,比如web目录,可以使用--output web:<directory name ...
Dart 是单线程模型,相对于 JavaScript,其也有 microTaskQueue 和 eventTaskQueue.
Zone 代表某个环境的稳定跨异步环境调用.
代码通常都执行在一个 zone中,如Zone.current.而main函数通常运行在默认的Zone.root上下文中.通过 runZoned 创建一个新zone 或 Zone.run 将代码运行到一个由 Zone.fork创建的上下文中.
开发者可以通过覆盖一个存在zone的一些方法来创建一个新zone.如自定义zone可以替换或修改print、timers、micortasks、uncaught erros 的默认行为.
Zone类不可以被继承.可以使用 fork 存在的 zone,通常是Zone.current和ZoneSpecification来自定义zone.这和继承Zone类来创建新的zone类似.
异步回调总是运行在其被规定的zone上下文中.使用一下步骤实现:
首先使用registerCallback、registerUnaryCallback、registerBinaryCallback中的一 ...
Kotlin Coroutine
提取函数-重构但是如果提取出来的函数包含了一个在当前作用域调用的协程构造器怎么办?这种情况下,suspend 修饰符就不能满足需求了使doWorld 成为 CoroutineScopr的一个扩展函数是一种解决方案,但这种方法使得API不清晰而不适用其他情况.理想的解决方案是CoroutineScope 作为一个包含目标函数的类的一个属性存在,或者这个类实现CoroutineScope接口.最后一种方案就是适用CoroutineScope(coroutineContext),但是这种方法会因为无法控制此方法的执行范围而表现出结构不安全性.只有一些私有 APIs 可以使用这个协程构造器.
类似守护线程的 Global CoroutinesGlobalScope启动的活动线程不会挂住线程,他们的行为类似守护线程.
取消与超时取消协程的执行在一个长时间运行的应用中,你可能需要精确控制后台运行的协程.例如用户可能关闭一个开启了协程的页面,那这个协程就需要被取消.launch函数返回一个Job对象可以取消此协程的执行.
同时取消协程可以同时取消.所有在 kot ...
Groovy MarkupTemplateEngine 主要面向生成类 XML(XML,XHTML,HTML5…)的标记语言,但是也支持其他基于内容的文本.和传统的模版引擎相比,此引擎支持基于 DSL 的 builder 语法.
123456xmlDeclaration()cars { carsh.each { car(make:it.make,model:it.model) }}
引用MarkupTemplateEngine支持引用来自另一个文件的内容.
另一份模版
原生内容
需要转义的内容
Podman 是什么? Podman 是一个非守护线程的容器引擎,支持在 Linux 系统上开发、管理和运行 OCI 容器.容器同时支持 root 身份和非 root 身份.只需要使用 alias docker=podman 就可以立即从 docker 切换到 podman.
安装
Arch Linux & Manjaro Linuxsudo pacman -S podman
Fedora,CentOSsudo yum -y install podman
Fedora-CoreOS,Fedora SilverBlue内置无需安装
Gentoosudo emerge app-emulation/libpod
MacOSbrew cask install podman
openSUSEsudo zypper install podman
openSUSE Kubic内置无需安装
RHEL712sudo subcription-manager repos --enable=rhel-7-server-extras-rpmssudo yum -y install podman
RHE ...