我创建了Friendly Chat app并希望添加一个不同主题的新屏幕,但它不起作用: - (
整个应用都有一个private string GetSuffix(string input)
{
var suffix = PropStreetSuffixDict.FirstOrDefault(kvp => input.Containts(kvp.Key.Trim(), StringComparison.CurrentCultureIgnoreCase))?.Value;
return suffix ?? string.Empty;
}
主题:
Brightness.dark
当用户点击按钮时,我按下设置屏幕:
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
print("build MaterialApp");
return new MaterialApp(
title: 'Friendly Chat',
theme: kTheme,
home: new ChatScreen(),
routes: <String, WidgetBuilder>{
SettingsScreen.PATH: (BuildContext context) => new SettingsScreen()
},
);
}
}
final ThemeData kTheme = new ThemeData(
primarySwatch: Colors.indigo,
primaryColor: Colors.indigoAccent[100],
primaryColorBrightness: Brightness.dark,
);
在设置屏幕中,我更改了Map results = await Navigator.of(context).pushNamed(SettingsScreen.PATH);
的{{1}}和AppBar
,但新的/不同的backgroundColor
无效(更改brightness
的工作)
brightness
如何将设置屏幕AppBar主题更改为轻量级主题?
修改
最后我要:
所有屏幕都有一个黑色的AppBar背景色,带有白色标题和图标
设置屏幕(仅限)具有浅色标题和图标的AppBar背景颜色
加分:如何为整个屏幕设置不同的主题,而不仅仅是AppBar
答案 0 :(得分:7)
您可以通过在Theme
小部件
通常,您会遇到与以下内容相似的内容:
class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
final AppBar appBar;
CustomAppBar(): appBar = new AppBar();
@override
Widget build(BuildContext context) {
return new Theme(
child: appBar,
data: new ThemeData.dark()
);
}
@override
Size get preferredSize => appBar.preferredSize;
}
由于Scaffold
需要PreferredSizeWidget
。
修改强>
为了回答你的#34;奖励点&#34;,这很简单。
而不是将AppBar
包裹在Theme
中,而是包裹Scaffold
。