startApp method

void startApp()

Implementation

void startApp() async {
  _timeRecord = DateTime.now().millisecondsSinceEpoch;
  emit(const AppStarting());
  S data;
  try {
    /// 处理初始化异步任务
    data = await repository.initApp();
  } catch (e, s) {
    emit(AppStartFailed(e, s, FixType.none));
    return;
  }

  /// 计算初始化的耗时时长
  int cost = DateTime.now().millisecondsSinceEpoch - _timeRecord;
  int waitTime = minStartDurationMs - cost;
  if (waitTime > 0) {
    /// 说明启动时间小于 [minStartDurationMs], 等待时间差
    emit(AppLoadDone(cost, data));
    await Future.delayed(Duration(milliseconds: waitTime));
  } else {
    /// 说明启动时间超过 [minStartDurationMs],给一点预加载的时间
    emit(AppLoadDone(cost, data));
    await Future.delayed(const Duration(milliseconds: 50));
  }
  emit(const AppStartSuccess());
}