runWithConsole function
void
runWithConsole(})
运行应用,并使用 Inspector。
app应用beforeRun运行前回调designWidth设计图宽度scalingBreakpoint启用按设计稿缩放的最大逻辑宽度logTruncateLength控制 Inspector 日志截断长度enableScaling是否启用scaled_app缩放ispectLogConfig可选 ISpect 日志配置;未传时不读取JunnyKitConfig
Implementation
void runWithConsole(
Widget app, {
Future<dynamic> Function()? beforeRun,
double designWidth = 375,
double scalingBreakpoint = kRunWithConsoleDefaultScalingBreakpoint,
int logTruncateLength = 2000,
bool enableScaling = kRunWithConsoleDefaultEnableScaling,
JunnyISpectLogConfig? ispectLogConfig,
}) {
final JunnyISpectRuntimeController logRuntimeController =
JunnyISpectRuntimeController.instance;
final ISpectLogger iSpectLogger = ISpectFlutter.init(
options: buildRunWithConsoleISpectLoggerOptions(
ispectLogConfig: ispectLogConfig,
logTruncateLength: logTruncateLength,
),
);
logRuntimeController.bindLogger(iSpectLogger);
// 先落地到运行期配置,后续 binding 初始化和根 MediaQuery 修正都从这里取值。
JunnyScalingConfig.configure(
enableScaling: enableScaling,
designWidth: designWidth,
scalingBreakpoint: scalingBreakpoint,
);
ISpect.run(
() async {
// 初始化缩放
if (JunnyScalingConfig.enableScaling) {
// scaled_app 必须在 runApp 前接管 Flutter binding(绑定层),否则首帧布局拿不到缩放规则。
ScaledWidgetsFlutterBinding.ensureInitialized(
scaleFactor: (Size deviceSize) {
// scaleFactor 会在 binding(绑定层)被多次读取,所以不能捕获入参快照;
// 统一从运行期配置取值,保证调用方覆盖配置后各入口使用同一套规则。
return resolveScalingFactor(
deviceSize: deviceSize,
designWidth: JunnyScalingConfig.designWidth,
scalingBreakpoint: JunnyScalingConfig.scalingBreakpoint,
);
},
);
} else {
WidgetsFlutterBinding.ensureInitialized();
}
// 由于是异步, 所以不能放在onInit中
if (beforeRun != null) {
await beforeRun.call();
}
runApp(app);
},
logger: iSpectLogger,
onFlutterError: (FlutterErrorDetails details, StackTrace? stackTrace) {
_dealWithError(
details.exception,
stackTrace ?? details.stack ?? StackTrace.current,
);
},
onZonedError: (Object error, StackTrace stackTrace) {
_dealWithError(error, stackTrace);
},
onPlatformDispatcherError: (Object error, StackTrace stackTrace) {
_dealWithError(error, stackTrace);
},
);
}