Чтобы получить цвет темы внутри виджета Flutter, вы можете использовать различные методы. Вот несколько примеров кода:
Метод 1: использование метода Theme.of
import 'package:flutter/material.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
Color themeColor = Theme.of(context).colorScheme.primary;
return Container(
color: themeColor,
child: Text('Widget with theme color'),
);
}
}
В этом методе вы используете Theme.of(context)для доступа к текущей теме, а затем получаете доступ к желаемому цвету через свойство colorScheme.
Метод 2: непосредственное использование ThemeData
import 'package:flutter/material.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
ThemeData themeData = Theme.of(context);
Color themeColor = themeData.colorScheme.primary;
return Container(
color: themeColor,
child: Text('Widget with theme color'),
);
}
}
В этом методе вы извлекаете весь объект ThemeData, используя Theme.of(context), а затем получаете доступ к желаемому цвету из colorScheme>собственность.
Метод 3. Использование шаблона InheritedWidget
import 'package:flutter/material.dart';
class ThemeColorContainer extends InheritedWidget {
final Color themeColor;
ThemeColorContainer({
required this.themeColor,
required Widget child,
}) : super(child: child);
static ThemeColorContainer? of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<ThemeColorContainer>();
}
@override
bool updateShouldNotify(ThemeColorContainer oldWidget) {
return themeColor != oldWidget.themeColor;
}
}
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
Color? themeColor = ThemeColorContainer.of(context)?.themeColor;
return Container(
color: themeColor,
child: Text('Widget with theme color'),
);
}
}
В этом методе вы определяете пользовательский InheritedWidgetпод названием ThemeColorContainerдля распространения цвета темы по дереву виджетов. Затем вы можете получить доступ к цвету темы, используя ThemeColorContainer.of(context)?.themeColor.