【发布时间】:2021-01-20 14:53:00
【问题描述】:
我只想在特定路线上将主题更改为redTheme。为此,我使用了routingCallback like
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'App',
theme: defaultTheme(context),
initialRoute: AppPages.INITIAL,
getPages: AppPages.routes,
routingCallback: (routing) => _routingCallback(context, routing),
);
}
_routingCallback(BuildContext context, Routing routing) {
if (routing.current == Routes.PURSUE_MODE) {
_changeThemeIfNeeded(redTheme(context));
} else {
_changeThemeIfNeeded(defaultTheme(context));
}
}
void _changeThemeIfNeeded(ThemeData theme) {
Get.changeTheme(theme);
}
}
不幸的是,它导致
════════ 小部件库捕获的异常 ══════════════════════════════════════════════════ ═════ setState() 或 markNeedsBuild() 在构建期间调用。相关的错误原因 小部件是:方向性 file:///Users/jakub/.pub-cache/hosted/pub.dartlang.org/get_navigation-3.12.0/lib/src/root/root_widget.dart:235:22 ══════════════════════════════════════════════════ ══════════════════════════════════════════════════
因此,我将主题更改包装在 try-catch 块中,所以一开始我没有遇到异常
void _changeThemeIfNeeded(ThemeData theme) {
try {
if (Get.theme != theme) {
Get.changeTheme(theme);
}
} catch (e) {
print('Not ready e = $e');
}
}
但我相信使用Get 框架有更优雅的方法来解决这个问题?
【问题讨论】:
标签: flutter flutter-get