您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
438 行
16 KiB
438 行
16 KiB
using System.Runtime.CompilerServices;
|
|
using Unity.UIWidgets.foundation;
|
|
//using Unity.UIWidgets.material;
|
|
using Unity.UIWidgets.service;
|
|
using Unity.UIWidgets.ui;
|
|
using Unity.UIWidgets.widgets;
|
|
using Brightness = Unity.UIWidgets.ui.Brightness;
|
|
using TextStyle = Unity.UIWidgets.painting.TextStyle;
|
|
|
|
namespace Unity.UIWidgets.cupertino {
|
|
class CupertinoThemeDataUtils {
|
|
|
|
public static readonly _CupertinoThemeDefaults _kDefaultTheme =
|
|
new _CupertinoThemeDefaults(
|
|
null,
|
|
CupertinoColors.systemBlue,
|
|
CupertinoColors.systemBackground,
|
|
CupertinoDynamicColor.withBrightness(
|
|
color: new Color(0xF0F9F9F9),
|
|
darkColor: new Color(0xF01D1D1D)
|
|
// Values extracted from navigation bar. For toolbar or tabbar the dark color is 0xF0161616.
|
|
),
|
|
CupertinoColors.systemBackground,
|
|
new _CupertinoTextThemeDefaults(CupertinoColors.label, CupertinoColors.inactiveGray)
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
public class CupertinoTheme : StatelessWidget {
|
|
public CupertinoTheme(
|
|
Key key = null,
|
|
CupertinoThemeData data = null,
|
|
Widget child = null
|
|
|
|
) : base(key: key) {
|
|
D.assert(child != null);
|
|
D.assert(data != null);
|
|
this.data = data;
|
|
this.child = child;
|
|
}
|
|
|
|
public readonly CupertinoThemeData data;
|
|
|
|
public readonly Widget child;
|
|
|
|
public static CupertinoThemeData of(BuildContext context) {
|
|
_InheritedCupertinoTheme inheritedTheme = context.dependOnInheritedWidgetOfExactType<_InheritedCupertinoTheme>();
|
|
var result = (inheritedTheme?.theme?.data ?? new CupertinoThemeData()).resolveFrom(context, nullOk: true);
|
|
return result;
|
|
}
|
|
|
|
public static Brightness? brightnessOf(BuildContext context, bool nullOk = false) {
|
|
_InheritedCupertinoTheme inheritedTheme = context.dependOnInheritedWidgetOfExactType<_InheritedCupertinoTheme>();
|
|
return (inheritedTheme?.theme?.data?.brightness) ?? MediaQuery.of(context, nullOk: nullOk)?.platformBrightness;
|
|
}
|
|
|
|
public override Widget build(BuildContext context) {
|
|
return new _InheritedCupertinoTheme(
|
|
theme: this,
|
|
child: new IconTheme(
|
|
data: new CupertinoIconThemeData(color: data.primaryColor),
|
|
child: child
|
|
)
|
|
);
|
|
}
|
|
|
|
public override void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
|
base.debugFillProperties(properties);
|
|
data.debugFillProperties(properties);
|
|
}
|
|
}
|
|
|
|
class _InheritedCupertinoTheme : InheritedWidget {
|
|
public _InheritedCupertinoTheme(
|
|
Key key = null,
|
|
CupertinoTheme theme = null,
|
|
Widget child = null
|
|
) : base(key: key, child: child) {
|
|
D.assert(theme != null);
|
|
this.theme = theme;
|
|
}
|
|
|
|
public readonly CupertinoTheme theme;
|
|
|
|
public override bool updateShouldNotify(InheritedWidget old) {
|
|
return theme.data != ((_InheritedCupertinoTheme) old).theme.data;
|
|
}
|
|
}
|
|
|
|
public class CupertinoThemeData : Diagnosticable {
|
|
public CupertinoThemeData(
|
|
Brightness? brightness = null,
|
|
Color primaryColor = null,
|
|
Color primaryContrastingColor = null,
|
|
CupertinoTextThemeData textTheme = null,
|
|
Color barBackgroundColor = null,
|
|
Color scaffoldBackgroundColor = null,
|
|
_CupertinoThemeDefaults defaults = null
|
|
) {
|
|
this.brightness = brightness;// ?? Brightness.light;
|
|
_primaryColor = primaryColor;
|
|
_primaryContrastingColor = primaryContrastingColor;
|
|
_textTheme = textTheme;
|
|
_barBackgroundColor = barBackgroundColor;
|
|
_scaffoldBackgroundColor = scaffoldBackgroundColor;
|
|
_defaults = defaults ?? CupertinoThemeDataUtils._kDefaultTheme;
|
|
|
|
}
|
|
|
|
|
|
public static CupertinoThemeData _rawWithDefaults(
|
|
Brightness? brightness,
|
|
Color primaryColor,
|
|
Color primaryContrastingColor ,
|
|
CupertinoTextThemeData textTheme ,
|
|
Color barBackgroundColor ,
|
|
Color scaffoldBackgroundColor ,
|
|
_CupertinoThemeDefaults defaults
|
|
) {
|
|
var themeData = new CupertinoThemeData(
|
|
brightness: brightness,
|
|
primaryColor: primaryColor,
|
|
primaryContrastingColor: primaryContrastingColor,
|
|
textTheme: textTheme,
|
|
barBackgroundColor: barBackgroundColor,
|
|
scaffoldBackgroundColor: scaffoldBackgroundColor,
|
|
defaults);
|
|
|
|
return themeData;
|
|
}
|
|
|
|
public _CupertinoThemeDefaults _defaults;
|
|
|
|
public readonly Brightness? brightness;
|
|
|
|
public Color primaryColor {
|
|
get {
|
|
return _primaryColor ?? _defaults.primaryColor;
|
|
}
|
|
}
|
|
readonly Color _primaryColor;
|
|
|
|
public Color primaryContrastingColor {
|
|
get {
|
|
return _primaryContrastingColor ?? _defaults.primaryContrastingColor;
|
|
}
|
|
}
|
|
readonly Color _primaryContrastingColor;
|
|
|
|
public CupertinoTextThemeData textTheme {
|
|
get {
|
|
return _textTheme ?? _defaults.textThemeDefaults.createDefaults(primaryColor: primaryColor);
|
|
}
|
|
}
|
|
readonly CupertinoTextThemeData _textTheme;
|
|
|
|
public Color barBackgroundColor {
|
|
get {
|
|
return _barBackgroundColor ?? _defaults.barBackgroundColor;
|
|
}
|
|
}
|
|
readonly Color _barBackgroundColor;
|
|
|
|
public Color scaffoldBackgroundColor {
|
|
get {
|
|
return _scaffoldBackgroundColor ?? _defaults.scaffoldBackgroundColor;
|
|
}
|
|
}
|
|
readonly Color _scaffoldBackgroundColor;
|
|
|
|
public CupertinoThemeData noDefault() {
|
|
return new _NoDefaultCupertinoThemeData(
|
|
brightness,
|
|
_primaryColor,
|
|
_primaryContrastingColor,
|
|
_textTheme,
|
|
_barBackgroundColor,
|
|
_scaffoldBackgroundColor
|
|
);
|
|
}
|
|
|
|
public CupertinoThemeData resolveFrom(BuildContext context, bool nullOk = false ) {
|
|
Color convertColor(Color color) => CupertinoDynamicColor.resolve(color, context, nullOk: nullOk);
|
|
|
|
return new CupertinoThemeData(
|
|
brightness:brightness,
|
|
primaryColor:convertColor(_primaryColor),
|
|
primaryContrastingColor:convertColor(_primaryContrastingColor),
|
|
textTheme:_textTheme?.resolveFrom(context, nullOk: nullOk),
|
|
barBackgroundColor:convertColor(_barBackgroundColor),
|
|
scaffoldBackgroundColor:convertColor(_scaffoldBackgroundColor),
|
|
defaults:_defaults.resolveFrom(context, _textTheme == null, nullOk: nullOk)
|
|
);
|
|
}
|
|
public CupertinoThemeData copyWith(
|
|
Brightness? brightness = null,
|
|
Color primaryColor = null,
|
|
Color primaryContrastingColor = null,
|
|
CupertinoTextThemeData textTheme = null,
|
|
Color barBackgroundColor = null,
|
|
Color scaffoldBackgroundColor = null
|
|
) {
|
|
//return new CupertinoThemeData(
|
|
return _rawWithDefaults(
|
|
brightness: brightness ?? this.brightness,
|
|
primaryColor: primaryColor ?? _primaryColor,
|
|
primaryContrastingColor: primaryContrastingColor ?? _primaryContrastingColor,
|
|
textTheme: textTheme ?? _textTheme,
|
|
barBackgroundColor: barBackgroundColor ?? _barBackgroundColor,
|
|
scaffoldBackgroundColor: scaffoldBackgroundColor ?? _scaffoldBackgroundColor,
|
|
_defaults
|
|
);
|
|
}
|
|
|
|
public override void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
|
base.debugFillProperties(properties);
|
|
CupertinoThemeData defaultData = new CupertinoThemeData();
|
|
properties.add(
|
|
new EnumProperty<Brightness?>("brightness", brightness, defaultValue: defaultData.brightness));
|
|
properties.add(new DiagnosticsProperty<Color>("primaryColor", primaryColor,
|
|
defaultValue: defaultData.primaryColor));
|
|
properties.add(new DiagnosticsProperty<Color>("primaryContrastingColor", primaryContrastingColor,
|
|
defaultValue: defaultData.primaryContrastingColor));
|
|
properties.add(
|
|
new DiagnosticsProperty<CupertinoTextThemeData>("textTheme", textTheme,
|
|
defaultValue: defaultData.textTheme));
|
|
properties.add(new DiagnosticsProperty<Color>("barBackgroundColor", barBackgroundColor,
|
|
defaultValue: defaultData.barBackgroundColor));
|
|
properties.add(new DiagnosticsProperty<Color>("scaffoldBackgroundColor", scaffoldBackgroundColor,
|
|
defaultValue: defaultData.scaffoldBackgroundColor));
|
|
textTheme.debugFillProperties(properties);
|
|
}
|
|
}
|
|
|
|
class _NoDefaultCupertinoThemeData : CupertinoThemeData {
|
|
public _NoDefaultCupertinoThemeData(
|
|
Brightness? brightness,
|
|
Color primaryColor,
|
|
Color primaryContrastingColor,
|
|
CupertinoTextThemeData textTheme,
|
|
Color barBackgroundColor,
|
|
Color scaffoldBackgroundColor
|
|
) : base(
|
|
brightness,
|
|
primaryColor,
|
|
primaryContrastingColor,
|
|
textTheme,
|
|
barBackgroundColor,
|
|
scaffoldBackgroundColor,
|
|
null) {
|
|
this.primaryColor = primaryColor;
|
|
this.primaryContrastingColor = primaryContrastingColor;
|
|
this.textTheme = textTheme;
|
|
this.barBackgroundColor = barBackgroundColor;
|
|
this.scaffoldBackgroundColor = scaffoldBackgroundColor;
|
|
}
|
|
|
|
public new readonly Brightness? brightness;
|
|
|
|
public new readonly Color primaryColor;
|
|
|
|
public new readonly Color primaryContrastingColor;
|
|
|
|
public new readonly CupertinoTextThemeData textTheme;
|
|
|
|
public new readonly Color barBackgroundColor;
|
|
|
|
public new readonly Color scaffoldBackgroundColor;
|
|
|
|
public new _NoDefaultCupertinoThemeData resolveFrom(BuildContext context,bool nullOk = false ) {
|
|
Color convertColor(Color color) => CupertinoDynamicColor.resolve(color, context, nullOk: nullOk);
|
|
|
|
return new _NoDefaultCupertinoThemeData(
|
|
brightness,
|
|
convertColor(primaryColor),
|
|
convertColor(primaryContrastingColor),
|
|
textTheme?.resolveFrom(context, nullOk: nullOk),
|
|
convertColor(barBackgroundColor),
|
|
convertColor(scaffoldBackgroundColor)
|
|
);
|
|
}
|
|
|
|
|
|
public new CupertinoThemeData copyWith(
|
|
Brightness? brightness = null,
|
|
Color primaryColor = null,
|
|
Color primaryContrastingColor = null,
|
|
CupertinoTextThemeData textTheme = null,
|
|
Color barBackgroundColor = null,
|
|
Color scaffoldBackgroundColor = null
|
|
) {
|
|
return new _NoDefaultCupertinoThemeData(
|
|
brightness ?? this.brightness,
|
|
primaryColor ?? this.primaryColor,
|
|
primaryContrastingColor ?? this.primaryContrastingColor,
|
|
textTheme ?? this.textTheme,
|
|
barBackgroundColor ?? this.barBackgroundColor,
|
|
scaffoldBackgroundColor ?? this.scaffoldBackgroundColor
|
|
);
|
|
}
|
|
}
|
|
|
|
public class _CupertinoThemeDefaults {
|
|
public _CupertinoThemeDefaults(
|
|
Brightness? brightness ,
|
|
Color primaryColor ,
|
|
Color primaryContrastingColor ,
|
|
Color barBackgroundColor ,
|
|
Color scaffoldBackgroundColor ,
|
|
_CupertinoTextThemeDefaults textThemeDefaults
|
|
)
|
|
{
|
|
this.brightness = brightness;
|
|
this.primaryColor = primaryColor;
|
|
this.primaryContrastingColor = primaryContrastingColor;
|
|
this.barBackgroundColor = barBackgroundColor;
|
|
this.scaffoldBackgroundColor = scaffoldBackgroundColor;
|
|
this.textThemeDefaults = textThemeDefaults;
|
|
|
|
}
|
|
public Brightness? brightness;
|
|
public Color primaryColor;
|
|
public Color primaryContrastingColor;
|
|
public Color barBackgroundColor;
|
|
public Color scaffoldBackgroundColor;
|
|
public _CupertinoTextThemeDefaults textThemeDefaults;
|
|
|
|
public _CupertinoThemeDefaults resolveFrom(BuildContext context, bool resolveTextTheme, bool nullOk = false) {
|
|
D.assert(nullOk != null);
|
|
Color convertColor(Color color) => CupertinoDynamicColor.resolve(color, context, nullOk: nullOk);
|
|
|
|
return new _CupertinoThemeDefaults(
|
|
brightness:brightness,
|
|
primaryColor:convertColor(primaryColor),
|
|
primaryContrastingColor:convertColor(primaryContrastingColor),
|
|
barBackgroundColor:convertColor(barBackgroundColor),
|
|
scaffoldBackgroundColor:convertColor(scaffoldBackgroundColor),
|
|
textThemeDefaults:resolveTextTheme ? textThemeDefaults?.resolveFrom(context, nullOk: nullOk) : textThemeDefaults
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
public class _CupertinoTextThemeDefaults {
|
|
public _CupertinoTextThemeDefaults(
|
|
Color labelColor = null,
|
|
Color inactiveGray = null
|
|
) {
|
|
this.labelColor = labelColor;
|
|
this.inactiveGray = inactiveGray;
|
|
}
|
|
|
|
public readonly Color labelColor;
|
|
public readonly Color inactiveGray;
|
|
|
|
public _CupertinoTextThemeDefaults resolveFrom(BuildContext context, bool nullOk = false) {
|
|
return new _CupertinoTextThemeDefaults(
|
|
CupertinoDynamicColor.resolve(labelColor, context, nullOk: nullOk),
|
|
CupertinoDynamicColor.resolve(inactiveGray, context, nullOk: nullOk)
|
|
);
|
|
}
|
|
|
|
public CupertinoTextThemeData createDefaults(Color primaryColor ) {
|
|
D.assert(primaryColor != null);
|
|
return new _DefaultCupertinoTextThemeData(
|
|
primaryColor: primaryColor,
|
|
labelColor: labelColor,
|
|
inactiveGray: inactiveGray
|
|
);
|
|
}
|
|
}
|
|
|
|
class _DefaultCupertinoTextThemeData : CupertinoTextThemeData {
|
|
public _DefaultCupertinoTextThemeData(
|
|
Color labelColor = null,
|
|
Color inactiveGray = null,
|
|
Color primaryColor = null
|
|
) : base(primaryColor: primaryColor)
|
|
{
|
|
D.assert(labelColor != null);
|
|
D.assert(inactiveGray != null);
|
|
D.assert(primaryColor != null);
|
|
|
|
this.labelColor = labelColor;
|
|
this.inactiveGray = inactiveGray;
|
|
|
|
}
|
|
|
|
public readonly Color labelColor;
|
|
public readonly Color inactiveGray;
|
|
|
|
|
|
public override TextStyle textStyle {
|
|
get {
|
|
return base.textStyle.copyWith(color: labelColor);
|
|
|
|
}
|
|
}
|
|
|
|
public override TextStyle tabLabelTextStyle {
|
|
get {
|
|
return base.tabLabelTextStyle.copyWith(color: inactiveGray);
|
|
}
|
|
}
|
|
|
|
|
|
public override TextStyle navTitleTextStyle {
|
|
get {
|
|
return base.navTitleTextStyle.copyWith(color: labelColor);
|
|
}
|
|
}
|
|
|
|
|
|
public override TextStyle navLargeTitleTextStyle {
|
|
get {
|
|
return base.navLargeTitleTextStyle.copyWith(color: labelColor);
|
|
}
|
|
}
|
|
|
|
|
|
public override TextStyle pickerTextStyle {
|
|
get {
|
|
return base.pickerTextStyle.copyWith(color: labelColor);
|
|
}
|
|
}
|
|
|
|
|
|
public override TextStyle dateTimePickerTextStyle {
|
|
get {
|
|
return base.dateTimePickerTextStyle.copyWith(color: labelColor);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|