gpt4 book ai didi

flutter - 如何使用 darkTheme : 在 flutter 中更改主题

转载 作者:IT王子 更新时间:2023-10-29 07:15:51 25 4
gpt4 key购买 nike

为了在我的 MaterialApp() 中管理主题,我使用:

MaterialApp(
...
theme: isDarkTheme ? darkTheme() : lightTheme(),
)

darkTheme()lightTheme() 只是简单的函数,返回 ThemeData()

所以,我使用一个继承的 Widget 来更改变量 isDarkTheme,然后我使用 setState((){}) 方法,所有的应用程序都被重建

但是,我在 Flutter 文档中看到我们可以使用 darkTheme:

我正在尝试这样做:

MaterialApp(
...
theme: lightTheme(),
darkTheme: darkTheme()
)

我们可以在申请过程中更改主题

最佳答案

darkTheme 属性用于定义设备进入深色模式时使用的Theme,因此您不能强制您的应用使用darkTheme 属性,因为它取决于 MediaQueryData.platformBrightness 的值,这是一个只读字段。

您可以定义多个主题用作 Theme 属性的值,并在应用过程中通过使用 StreamBuilder 包裹在您的 中在它们之间切换>MaterialApp,这不会像您使用 setState 更改主题时那样导致应用停止并重新构建(您需要 rxdart 包来应用以下解决方案):

   //BehaviorSubject stream any changes immediately without explicit call
var themeSubject = BehaviorSubject<ThemeData>();

//This way the app won't rebuild when the user selects the same theme
Stream<ThemeData> getTheme() => themeSubject.stream.distinct();

void setTheme (MaterialColor color){
pointsSubject.sink.add(ThemeData(primarySwatch: color) ;
}


return StreamBuilder<ThemeData>(
stream: getTheme(),
initialData: ThemeData(
primarySwatch: Colors.blue,
primaryTextTheme: TextTheme(
title: TextStyle(color: Colors.white),
),
builder: (context, themeSnapshot){
return MaterialApp(theme: themeSnapshot.data);
}
):

然后使用您的 InheritedWidget 访问 setTheme 并根据需要更改它。

关于flutter - 如何使用 darkTheme : 在 flutter 中更改主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57417624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com