initEasyApp function

Future<void> initEasyApp({
  1. bool? showOnError,
  2. VoidCallback? appBaseURLChangedCallback,
  3. ValueChanged<String>? customExceptionReport,
  4. bool logPermanent = false,
})

可切环境、查看日志 additional arguments: --dart-define=app-debug-flag=true flutter run --release --dart-define=app-debug-flag=true

Implementation

Future<void> initEasyApp(
    {bool? showOnError,
    VoidCallback? appBaseURLChangedCallback,
    ValueChanged<String>? customExceptionReport,
    bool logPermanent = false}) async {
  /// https://api.flutter-io.cn/flutter/dart-core/bool/bool.fromEnvironment.html
  const appDebugFlag = bool.fromEnvironment("app-debug-flag");
  isAppDebugFlag = appDebugFlag;
  _appBaseURLChangedCallback = appBaseURLChangedCallback;

  WidgetsFlutterBinding.ensureInitialized();

  BaseEasyLoading.instance.maskType = BaseEasyLoadingMaskType.black;

  final utils = await Future.wait([
    PackageInfoUtil.init(),
    SharedPreferencesUtil.init(),
  ]);

  Get.put(EasyLogConsoleController(), permanent: logPermanent);

  void localLogWriter(String text, {bool isError = false}) {
    if (isError) {
      logError(text);
    } else {
      logDebug(text);
    }
  }

  Get.config(
    enableLog: isDebug || isAppDebugFlag,
    logWriterCallback: localLogWriter,
  );

  logInfo("Init: $utils");
  if (isAppDebugFlag) {
    final network = await initSelectedBaseURLType();
    logInfo("Network: $network");
  }

  if (showOnError ?? isAppDebugFlag) {
    Future<void> showError(String middleText) async {
      if (Get.context == null) {
        logWarning("捕获到异常: \n$middleText");
      } else {
        if (customExceptionReport != null) {
          customExceptionReport(middleText);
        }
      }
    }

    // 先将 onerror 保存起来
    var onError = FlutterError.onError;
    // onError是FlutterError的一个静态属性,它有一个默认的处理方法 dumpErrorToConsole
    FlutterError.onError = (errorDetails) {
      showError("$errorDetails");
      // 调用默认的onError处理
      onError?.call(errorDetails);
    };
    // 官方推荐使用
    PlatformDispatcher.instance.onError = (error, stack) {
      showError("$error\n$stack");
      return true;
    };
  }
}