Includes Diagnosticable, more descriptive field names, lerp, ==, and hashCode
181 lines
7.0 KiB
Dart
181 lines
7.0 KiB
Dart
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:stream_chat_flutter/src/theme/avatar_theme.dart';
|
|
|
|
/// Class for getting message theme
|
|
class MessageThemeData with Diagnosticable {
|
|
/// Creates a [MessageThemeData].
|
|
const MessageThemeData({
|
|
this.repliesStyle,
|
|
this.messageTextStyle,
|
|
this.messageAuthorStyle,
|
|
this.messageLinksStyle,
|
|
this.messageBackgroundColor,
|
|
this.messageBorderColor,
|
|
this.reactionsBackgroundColor,
|
|
this.reactionsBorderColor,
|
|
this.reactionsMaskColor,
|
|
this.avatarTheme,
|
|
this.createdAtStyle,
|
|
});
|
|
|
|
/// Text style for message text
|
|
final TextStyle? messageTextStyle;
|
|
|
|
/// Text style for message author
|
|
final TextStyle? messageAuthorStyle;
|
|
|
|
/// Text style for message links
|
|
final TextStyle? messageLinksStyle;
|
|
|
|
/// Text style for created at text
|
|
final TextStyle? createdAtStyle;
|
|
|
|
/// Text style for replies
|
|
final TextStyle? repliesStyle;
|
|
|
|
/// Color for messageBackgroundColor
|
|
final Color? messageBackgroundColor;
|
|
|
|
/// Color for message border color
|
|
final Color? messageBorderColor;
|
|
|
|
/// Color for reactions
|
|
final Color? reactionsBackgroundColor;
|
|
|
|
/// Colors reaction border
|
|
final Color? reactionsBorderColor;
|
|
|
|
/// Color for reaction mask
|
|
final Color? reactionsMaskColor;
|
|
|
|
/// Theme of the avatar
|
|
final AvatarThemeData? avatarTheme;
|
|
|
|
/// Copy with a theme
|
|
MessageThemeData copyWith({
|
|
TextStyle? messageTextStyle,
|
|
TextStyle? messageAuthorStyle,
|
|
TextStyle? messageLinksStyle,
|
|
TextStyle? createdAtStyle,
|
|
TextStyle? repliesStyle,
|
|
Color? messageBackgroundColor,
|
|
Color? messageBorderColor,
|
|
AvatarThemeData? avatarTheme,
|
|
Color? reactionsBackgroundColor,
|
|
Color? reactionsBorderColor,
|
|
Color? reactionsMaskColor,
|
|
}) =>
|
|
MessageThemeData(
|
|
messageTextStyle: messageTextStyle ?? this.messageTextStyle,
|
|
messageAuthorStyle: messageAuthorStyle ?? this.messageAuthorStyle,
|
|
messageLinksStyle: messageLinksStyle ?? this.messageLinksStyle,
|
|
createdAtStyle: createdAtStyle ?? this.createdAtStyle,
|
|
messageBackgroundColor:
|
|
messageBackgroundColor ?? this.messageBackgroundColor,
|
|
messageBorderColor: messageBorderColor ?? this.messageBorderColor,
|
|
avatarTheme: avatarTheme ?? this.avatarTheme,
|
|
repliesStyle: repliesStyle ?? this.repliesStyle,
|
|
reactionsBackgroundColor:
|
|
reactionsBackgroundColor ?? this.reactionsBackgroundColor,
|
|
reactionsBorderColor: reactionsBorderColor ?? this.reactionsBorderColor,
|
|
reactionsMaskColor: reactionsMaskColor ?? this.reactionsMaskColor,
|
|
);
|
|
|
|
/// Linearly interpolate from one [MessageThemeData] to another.
|
|
MessageThemeData lerp(MessageThemeData a, MessageThemeData b, double t) =>
|
|
MessageThemeData(
|
|
avatarTheme:
|
|
const AvatarThemeData().lerp(a.avatarTheme!, b.avatarTheme!, t),
|
|
createdAtStyle: TextStyle.lerp(a.createdAtStyle, b.createdAtStyle, t),
|
|
messageAuthorStyle:
|
|
TextStyle.lerp(a.messageAuthorStyle, b.messageAuthorStyle, t),
|
|
messageBackgroundColor:
|
|
Color.lerp(a.messageBackgroundColor, b.messageBackgroundColor, t),
|
|
messageBorderColor:
|
|
Color.lerp(a.messageBorderColor, b.messageBorderColor, t),
|
|
messageLinksStyle:
|
|
TextStyle.lerp(a.messageLinksStyle, b.messageLinksStyle, t),
|
|
messageTextStyle:
|
|
TextStyle.lerp(a.messageTextStyle, b.messageTextStyle, t),
|
|
reactionsBackgroundColor: Color.lerp(
|
|
a.reactionsBackgroundColor, b.reactionsBackgroundColor, t),
|
|
reactionsBorderColor:
|
|
Color.lerp(a.messageBorderColor, b.reactionsBorderColor, t),
|
|
reactionsMaskColor:
|
|
Color.lerp(a.reactionsMaskColor, b.reactionsMaskColor, t),
|
|
repliesStyle: TextStyle.lerp(a.repliesStyle, b.repliesStyle, t),
|
|
);
|
|
|
|
/// Merge with a theme
|
|
MessageThemeData merge(MessageThemeData? other) {
|
|
if (other == null) return this;
|
|
return copyWith(
|
|
messageTextStyle: messageTextStyle?.merge(other.messageTextStyle) ??
|
|
other.messageTextStyle,
|
|
messageAuthorStyle: messageAuthorStyle?.merge(other.messageAuthorStyle) ??
|
|
other.messageAuthorStyle,
|
|
messageLinksStyle: messageLinksStyle?.merge(other.messageLinksStyle) ??
|
|
other.messageLinksStyle,
|
|
createdAtStyle:
|
|
createdAtStyle?.merge(other.createdAtStyle) ?? other.createdAtStyle,
|
|
repliesStyle:
|
|
repliesStyle?.merge(other.repliesStyle) ?? other.repliesStyle,
|
|
messageBackgroundColor: other.messageBackgroundColor,
|
|
messageBorderColor: other.messageBorderColor,
|
|
avatarTheme: avatarTheme?.merge(other.avatarTheme) ?? other.avatarTheme,
|
|
reactionsBackgroundColor: other.reactionsBackgroundColor,
|
|
reactionsBorderColor: other.reactionsBorderColor,
|
|
reactionsMaskColor: other.reactionsMaskColor,
|
|
);
|
|
}
|
|
|
|
@override
|
|
bool operator ==(Object other) =>
|
|
identical(this, other) ||
|
|
other is MessageThemeData &&
|
|
runtimeType == other.runtimeType &&
|
|
messageTextStyle == other.messageTextStyle &&
|
|
messageAuthorStyle == other.messageAuthorStyle &&
|
|
messageLinksStyle == other.messageLinksStyle &&
|
|
createdAtStyle == other.createdAtStyle &&
|
|
repliesStyle == other.repliesStyle &&
|
|
messageBackgroundColor == other.messageBackgroundColor &&
|
|
messageBorderColor == other.messageBorderColor &&
|
|
reactionsBackgroundColor == other.reactionsBackgroundColor &&
|
|
reactionsBorderColor == other.reactionsBorderColor &&
|
|
reactionsMaskColor == other.reactionsMaskColor &&
|
|
avatarTheme == other.avatarTheme;
|
|
|
|
@override
|
|
int get hashCode =>
|
|
messageTextStyle.hashCode ^
|
|
messageAuthorStyle.hashCode ^
|
|
messageLinksStyle.hashCode ^
|
|
createdAtStyle.hashCode ^
|
|
repliesStyle.hashCode ^
|
|
messageBackgroundColor.hashCode ^
|
|
messageBorderColor.hashCode ^
|
|
reactionsBackgroundColor.hashCode ^
|
|
reactionsBorderColor.hashCode ^
|
|
reactionsMaskColor.hashCode ^
|
|
avatarTheme.hashCode;
|
|
|
|
@override
|
|
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
|
super.debugFillProperties(properties);
|
|
properties
|
|
..add(DiagnosticsProperty('messageTextStyle', messageTextStyle))
|
|
..add(DiagnosticsProperty('messageAuthorStyle', messageAuthorStyle))
|
|
..add(DiagnosticsProperty('messageLinksStyle', messageLinksStyle))
|
|
..add(DiagnosticsProperty('createdAtStyle', createdAtStyle))
|
|
..add(DiagnosticsProperty('repliesStyle', repliesStyle))
|
|
..add(ColorProperty('messageBackgroundColor', messageBackgroundColor))
|
|
..add(ColorProperty('messageBorderColor', messageBorderColor))
|
|
..add(DiagnosticsProperty('avatarTheme', avatarTheme))
|
|
..add(ColorProperty('reactionsBackgroundColor', reactionsBackgroundColor))
|
|
..add(ColorProperty('reactionsBorderColor', reactionsBorderColor))
|
|
..add(ColorProperty('reactionsMaskColor', reactionsMaskColor));
|
|
}
|
|
}
|