Flutter 字体';s主题没有';当用户更改应用程序时,无法正确重建';s主题(GetX状态管理)

Flutter 字体';s主题没有';当用户更改应用程序时,无法正确重建';s主题(GetX状态管理),flutter,Flutter,我创建了一个“几乎完成”的应用程序,但在切换主题方面存在一些问题。我正在使用getx和get\u storage进行状态管理 我还为主题使用了大量的静态类型,因为我认为它不应该一直重建。它适用于其他组件,但不适用于文本。它的行为是这样的,有点奇怪 我不知道是什么原因导致了这种情况,我应该避免使用静态类作为主题吗? 请看一下我的剧本,如果我做错了什么,请随时告诉我 main.dart void main()异步{ WidgetsFlutterBinding.ensureInitialized()

我创建了一个“几乎完成”的应用程序,但在切换主题方面存在一些问题。我正在使用
getx
get\u storage
进行状态管理

我还为主题使用了大量的
静态
类型,因为我认为它不应该一直重建。它适用于其他组件,但不适用于文本。它的行为是这样的,有点奇怪

我不知道是什么原因导致了这种情况,我应该避免使用
静态类作为主题吗?
请看一下我的剧本,如果我做错了什么,请随时告诉我

main.dart

void main()异步{
WidgetsFlutterBinding.ensureInitialized();
等待GetStorage.init();
...
...
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
最后一个框=GetStorage();
@凌驾
小部件构建(构建上下文){
返回SimpleBuilder(
建筑商:(){
bool isDark=box.read('darkMode');
返回GetMaterialApp(
...
主题:CustomTheme.light,
黑暗主题:自定义主题。黑暗,
themeMode:isDark==null
?emode.system
:isDark?ThemeMode.dark:ThemeMode.light,
...
);
},
);
}
}
自定义主题。省道

类自定义主题{
静态数据获取光{
返回主题数据.light().copyWith(
...
cardTheme:CustomCardTheme.shared,
textTheme:CustomTextTheme.light,
...
);
}
静态数据变暗{
返回主题数据.dark().copyWith(
...
cardTheme:CustomCardTheme.shared,
textTheme:CustomTextTheme.dark,
...
);
}
}
card\u主题飞镖

class自定义卡片主题{
静态主题得到共享{
返回卡片主题(
标高:8.0,
边距:仅限常量边集(底部:8.0),
阴影颜色:颜色。黑色26,
形状:圆形矩形边框(
边界半径:边界半径。圆形(10.0),
),
);
}
}
text\u主题.省道

const String fontflash='Nunito Sans';
const TextStyle _lightStyle=TextStyle(
颜色:颜色,黑色,
fontFamily:fontFamily,
);
const TextStyle\u darkStyle=TextStyle(
颜色:颜色,白色,
fontFamily:fontFamily,
);
类CustomTextTheme{
静态文本主题变亮{
返回ThemeData.light().textTheme.copyWith(
标题1:_lightStyle,
标题2:_lightStyle,
标题3:_lightStyle,
标题4:_lightStyle,
标题5:_lightStyle,
标题6:_lightStyle,
副标题1:_lightStyle,
副标题2:_lightStyle,
bodyText1:_lightStyle,
bodyText2:_lightStyle,
//描述:第二种风格,
);
}
静态文本主题变暗{
返回ThemeData.dark().textTheme.copyWith(
标题1:_darkStyle,
标题2:_darkStyle,
标题3:_darkStyle,
标题4:_darkStyle,
标题5:_darkStyle,
标题6:_darkStyle,
字幕1:黑色风格,
副标题2:黑色风格,
bodyText1:_darkStyle,
bodyText2:_darkStyle,
//描述:第二种风格,
);
}
}
profile\u菜单\u卡片.省道

class ProfileMenuCard扩展了GetView{
常数剖面图({
关键点,
这是我的背景色,
此.iconHeight=18.0,
this.iconWidth=18.0,
这个,拖尾,,
@需要这个标签,
@需要此.icon,
@需要此.onTap,
}):super(key:key);
最终颜色iconBackgroundColor;
最终字符串标签;
最后的字符串图标;
最后的双iconHeight;
最终双iconWidth;
最终确认为onTap;
最终窗口小部件跟踪;
@凌驾
小部件构建(构建上下文){
回程卡(
孩子:填充(
填充:常量边集。对称(水平:16.0),
孩子:ListTile(
onTap:onTap,
contentPadding:EdgeInsets.zero,
领先:集装箱(
身高:32,
宽度:32,
装饰:盒子装饰(
颜色:iconBackgroundColor??Get.theme.primaryColor,
边界半径:边界半径。圆形(10.0),
),
儿童:中心(
子项:SvgPicture.asset(
偶像
身高:iconHeight,
宽度:iconWidth,
),
),
),
标题:正文(
StringUtils.capitalize(标签,allWords:true),
样式:Get.textTheme.bodyText1.copyWith(
fontWeight:fontWeight.w600,
),
),
尾随:尾随??图标(图标。V形右),
),
),
);
}
}
dark\u mode\u开关.省道

class DarkModeSwitch扩展了无状态小部件{
最后一个框=GetStorage();
@凌驾
小部件构建(构建上下文){
bool isDark=box.read('darkMode');
返回变换比例(
比例:0.8,
孩子:CupertinoSwitch(
价值:isDark,,
onChanged:(bool val)=>box.write('darkMode',val),
),
);
}
}
profile\u页面.省道

const EdgeInsets\u titlePadding=EdgeInsets.only(底部:10.0,左侧:8.0);
类ProfilePage扩展了GetView{
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:SingleChildScrollView(
填充:常量边集。对称(水平:20.0),
子:列(
crossAxisAlignment:crossAxisAlignment.stretch,
儿童:[
列表视图组(
标题:填充(
填充:_title添加,
子项:Text('account.info.tr,style:Get.textTheme.caption),
),
项目