簡體   English   中英

為什么在 Flutter 中使用 colorScheme 時沒有應用 primarySwatch 顏色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM