class ViewUtil {
  ///界面初始化完成
  static Future<Void> initFinish() async {
    Completer<Void> completer = Completer();

    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      completer.complete();
    });

    return completer.future;
  }
}

void _init() async {
    var s = await ViewUtil.initFinish();
    print(s);
}

时序 4 种类型
Counter
Counter 表示收集的数据是按照时间推移不断累加变化的,我们往往用它记录服务请求总量、错误总数等。

Gauge
Gauge 表示采集的数据是一个瞬时值,时间前后没有关联,可以任意变化(忽高忽低),比如可以用来记录内存、磁盘使用量。

Histogram
Histogram 由 _bucket{le=""},_bucket{le="+Inf"}, _sum,_count 组成,主要对采样的数据(例如请求耗时或响应大小)按照预设的 bucket(统计区间)进行累计,然后针对某个时间范围统计区间的变化情况,可以很方便得出指标的分位值,例如我们可以用它来计算最近5分钟请求耗时的95峰值。

Summary
Summary 和 Histogram 类似,由 {quantile="<φ>"},_sum,_count 组成,主要用于表示一段时间内数据采样结果(通常是请求持续时间或响应大小),它直接存储了 quantile 数据,而不是根据统计区间计算出来的。

Histogram vs Summary
都包含 _sum,_count。
Histogram 需要通过 _bucket 设定分布实时计算 quantile, 而 Summary 直接存储了 quantile 的值。
真实应用场景中,大家使用 Histogram 更多一些。

安装服务:

apt-get -y install cups

安装Brother驱动,详细可以进Github看看支持驱动:https://github.com/pdewacht/brlaser/issues

apt-get install printer-driver-brlaser

重启服务器

sudo cupsctl --remote-any
sudo /etc/init.d/cups restart

安装苹果Airprint

sudo apt-get -y install avahi-daemon avahi-discoverlibnss-mdns

avahi-discoverlibnss-mdns可能没有。如果没有。试试 avahi-* 装全部

重启服务。就能苹果手机看到。

sudo service avahi-daemon restart

Win的话直接搜就能有。不用单独搞Smaba

数据变化监听
除了使用 Obx 实现界面数据自动刷新外,GetX 提供了多种手动方式对响应式变量进行数据变化监听,当数据发生变化时执行自定义的逻辑,比如数据变更后重新请求接口等。

ever 当数据发生改变时触发
everAll 和 "ever "很像,只是监听的是多个响应式变量的变化,当其中一个发生变化就会触发回调
once 只在变量第一次被改变时被调用
debounce 防抖,即延迟一定时间调用,且在规定时间内只有最后一次改变会触发回调。如设置时间为 1 秒,发生了3次数据变化,每次间隔500毫秒,则只有最后一次变化会触发回调。
interval 时间间隔内只有最后一次变化会触发回调。如设置时间间隔为1秒,则在1秒内无论点击多少次都只有最后一次会触发回调,然后进入下一次的时间间隔

实例化和绑定,使用
GetBuilder(

init: CounterController(), //Controller 首次初始化
builder: (controller) {
    return Text("${controller.count}", style: const TextStyle(fontSize: 50));

})

直接实例化:
Get.put(CounterController());

延迟实例化,第一次使用时才被实例化:
Get.lazyPut(() => CounterController());

删除注入:
Get.delete();

查找:
final controller = Get.find();
// 或者
CounterController controller = Get.find();

普通路由

to:进入下一个界面
Get.to(CounterPage());

使用 arguments 进行参数传递:
Get.to(CounterPage(), arguments: count);
使用 arguments 方式可以传递任意类型的参数。
在下个页面获取参数:
dynamic args = Get.arguments;

off:进入下一个界面,且导航没有返回
Get.off(CounterPage());
offAll: 进入下一个界面并取消之前的所有路由
Get.offAll(CounterPage());

back:返回
Get.back();

返回传参:
Get.back(result: 'success');
获取返回参数:
var data = await Get.to(CounterPage());