![](/img/trans.png)
[英]Flutter: ColorScheme.secondary never applied to set accent color
[英]Why primarySwatch color is not applied when colorScheme is used in Flutter?
我是新來的,並且對在 MaterialApp 中的主題屬性中設置顏色感到非常困惑。
這是我的代碼。
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My Playground',
theme: ThemeData(
primarySwatch: Colors.red,
colorScheme: ThemeData().colorScheme.copyWith(
secondary: Colors.pink[300],
tertiary: Colors.purple[200],
),
canvasColor: Color.fromARGB(249, 220, 224, 220),
// brightness: Brightness.dark),
),
initialRoute: '/',
routes: {
'/': (context) => Tabs(),
GridItemDetailList.routeName: (context) => GridItemDetailList()
},
);
}
}
在 ThemeData 內部,我使用的是 primarySwatch 和 colorScheme。 最初我使用了accentColor,但由於它已被棄用,因此更改為colorScheme。
然而 colorScheme 屬性並沒有像我預期的那樣工作。
當我注釋掉colorScheme時,紅色的primarySwatch顏色很好地應用於appBar。
但是當使用 colorScheme 時,primarySwatch 顏色不會應用到 appBar,它顯示的是材質應用程序的默認顏色。
為什么 colorScheme 的工作方式與accentColor 不同? 我不應該將 primarySwatch 與 colorScheme 一起使用以自定義其顏色嗎?
因為默認情況下,所有 Material 組件都使用“ColorScheme”和“Text Theme”作為 UI 視覺屬性。
官方文檔說:
Material 組件使用 [colorScheme] 和 [textTheme] 來計算視覺屬性的默認值。 看圖片
指定 ColorScheme 后,您可以使用其 primarySwatch 構造函數來提供 primarySwatch,但 ThemeData 類上的主色板在這種情況下不起作用。
ThemeData(
fontFamily: 'Lato',
colorScheme: ColorScheme.fromSwatch(primarySwatch: AppColors.primary).copyWith(
secondary: AppColors.secondary,
).copyWith(primary: Colors.amber, secondary: Colors.red,));
官方文檔說 PrimarySwtach:
由於歷史原因,您可以提供 [primaryColor] 或 [primarySwatch] 來構造 [colorScheme],而不是使用 [colorSchemeSeed] 或 [colorScheme],但結果不會像使用從種子生成時那樣完整顏色。 看圖片
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.