|
|
|
@@ -1,8 +1,9 @@
|
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:stream_chat_flutter/src/extension.dart';
|
|
|
|
|
|
|
|
|
|
/// Defines the theme dedicated to the [MessageInput] widget
|
|
|
|
|
class MessageInputTheme {
|
|
|
|
|
class MessageInputTheme with Diagnosticable {
|
|
|
|
|
/// Returns a new [MessageInputTheme]
|
|
|
|
|
const MessageInputTheme({
|
|
|
|
|
this.sendAnimationDuration,
|
|
|
|
@@ -10,7 +11,7 @@ class MessageInputTheme {
|
|
|
|
|
this.sendButtonColor,
|
|
|
|
|
this.actionButtonIdleColor,
|
|
|
|
|
this.sendButtonIdleColor,
|
|
|
|
|
this.inputBackground,
|
|
|
|
|
this.inputBackgroundColor,
|
|
|
|
|
this.inputTextStyle,
|
|
|
|
|
this.inputDecoration,
|
|
|
|
|
this.activeBorderGradient,
|
|
|
|
@@ -38,7 +39,7 @@ class MessageInputTheme {
|
|
|
|
|
final Color? expandButtonColor;
|
|
|
|
|
|
|
|
|
|
/// Background color of [MessageInput]
|
|
|
|
|
final Color? inputBackground;
|
|
|
|
|
final Color? inputBackgroundColor;
|
|
|
|
|
|
|
|
|
|
/// TextStyle of [MessageInput]
|
|
|
|
|
final TextStyle? inputTextStyle;
|
|
|
|
@@ -58,7 +59,7 @@ class MessageInputTheme {
|
|
|
|
|
/// Returns a new [MessageInputTheme] replacing some of its properties
|
|
|
|
|
MessageInputTheme copyWith({
|
|
|
|
|
Duration? sendAnimationDuration,
|
|
|
|
|
Color? inputBackground,
|
|
|
|
|
Color? inputBackgroundColor,
|
|
|
|
|
Color? actionButtonColor,
|
|
|
|
|
Color? sendButtonColor,
|
|
|
|
|
Color? actionButtonIdleColor,
|
|
|
|
@@ -73,7 +74,7 @@ class MessageInputTheme {
|
|
|
|
|
MessageInputTheme(
|
|
|
|
|
sendAnimationDuration:
|
|
|
|
|
sendAnimationDuration ?? this.sendAnimationDuration,
|
|
|
|
|
inputBackground: inputBackground ?? this.inputBackground,
|
|
|
|
|
inputBackgroundColor: inputBackgroundColor ?? this.inputBackgroundColor,
|
|
|
|
|
actionButtonColor: actionButtonColor ?? this.actionButtonColor,
|
|
|
|
|
sendButtonColor: sendButtonColor ?? this.sendButtonColor,
|
|
|
|
|
actionButtonIdleColor:
|
|
|
|
@@ -87,12 +88,40 @@ class MessageInputTheme {
|
|
|
|
|
borderRadius: borderRadius ?? this.borderRadius,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/// Linearly interpolate from one [MessageInputTheme] to another.
|
|
|
|
|
MessageInputTheme lerp(
|
|
|
|
|
MessageInputTheme a,
|
|
|
|
|
MessageInputTheme b,
|
|
|
|
|
double t,
|
|
|
|
|
) =>
|
|
|
|
|
MessageInputTheme(
|
|
|
|
|
actionButtonColor:
|
|
|
|
|
Color.lerp(a.actionButtonColor, b.actionButtonColor, t),
|
|
|
|
|
actionButtonIdleColor:
|
|
|
|
|
Color.lerp(a.actionButtonIdleColor, b.actionButtonIdleColor, t),
|
|
|
|
|
activeBorderGradient:
|
|
|
|
|
Gradient.lerp(a.activeBorderGradient, b.activeBorderGradient, t),
|
|
|
|
|
borderRadius: BorderRadius.lerp(a.borderRadius, b.borderRadius, t),
|
|
|
|
|
expandButtonColor:
|
|
|
|
|
Color.lerp(a.expandButtonColor, b.expandButtonColor, t),
|
|
|
|
|
idleBorderGradient:
|
|
|
|
|
Gradient.lerp(a.idleBorderGradient, b.idleBorderGradient, t),
|
|
|
|
|
inputBackgroundColor:
|
|
|
|
|
Color.lerp(a.inputBackgroundColor, b.inputBackgroundColor, t),
|
|
|
|
|
inputTextStyle: TextStyle.lerp(a.inputTextStyle, b.inputTextStyle, t),
|
|
|
|
|
sendButtonColor: Color.lerp(a.sendButtonColor, b.sendButtonColor, t),
|
|
|
|
|
sendButtonIdleColor:
|
|
|
|
|
Color.lerp(a.sendButtonIdleColor, b.sendButtonIdleColor, t),
|
|
|
|
|
sendAnimationDuration: a.sendAnimationDuration,
|
|
|
|
|
inputDecoration: a.inputDecoration,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/// Merges [this] [MessageInputTheme] with the [other]
|
|
|
|
|
MessageInputTheme merge(MessageInputTheme? other) {
|
|
|
|
|
if (other == null) return this;
|
|
|
|
|
return copyWith(
|
|
|
|
|
sendAnimationDuration: other.sendAnimationDuration,
|
|
|
|
|
inputBackground: other.inputBackground,
|
|
|
|
|
inputBackgroundColor: other.inputBackgroundColor,
|
|
|
|
|
actionButtonColor: other.actionButtonColor,
|
|
|
|
|
actionButtonIdleColor: other.actionButtonIdleColor,
|
|
|
|
|
sendButtonColor: other.sendButtonColor,
|
|
|
|
@@ -107,4 +136,55 @@ class MessageInputTheme {
|
|
|
|
|
expandButtonColor: other.expandButtonColor,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
bool operator ==(Object other) =>
|
|
|
|
|
identical(this, other) ||
|
|
|
|
|
other is MessageInputTheme &&
|
|
|
|
|
runtimeType == other.runtimeType &&
|
|
|
|
|
sendAnimationDuration == other.sendAnimationDuration &&
|
|
|
|
|
sendButtonColor == other.sendButtonColor &&
|
|
|
|
|
actionButtonColor == other.actionButtonColor &&
|
|
|
|
|
sendButtonIdleColor == other.sendButtonIdleColor &&
|
|
|
|
|
actionButtonIdleColor == other.actionButtonIdleColor &&
|
|
|
|
|
expandButtonColor == other.expandButtonColor &&
|
|
|
|
|
inputBackgroundColor == other.inputBackgroundColor &&
|
|
|
|
|
inputTextStyle == other.inputTextStyle &&
|
|
|
|
|
inputDecoration == other.inputDecoration &&
|
|
|
|
|
idleBorderGradient == other.idleBorderGradient &&
|
|
|
|
|
activeBorderGradient == other.activeBorderGradient &&
|
|
|
|
|
borderRadius == other.borderRadius;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
int get hashCode =>
|
|
|
|
|
sendAnimationDuration.hashCode ^
|
|
|
|
|
sendButtonColor.hashCode ^
|
|
|
|
|
actionButtonColor.hashCode ^
|
|
|
|
|
sendButtonIdleColor.hashCode ^
|
|
|
|
|
actionButtonIdleColor.hashCode ^
|
|
|
|
|
expandButtonColor.hashCode ^
|
|
|
|
|
inputBackgroundColor.hashCode ^
|
|
|
|
|
inputTextStyle.hashCode ^
|
|
|
|
|
inputDecoration.hashCode ^
|
|
|
|
|
idleBorderGradient.hashCode ^
|
|
|
|
|
activeBorderGradient.hashCode ^
|
|
|
|
|
borderRadius.hashCode;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
|
|
|
|
super.debugFillProperties(properties);
|
|
|
|
|
properties
|
|
|
|
|
..add(DiagnosticsProperty('sendAnimationDuration', sendAnimationDuration))
|
|
|
|
|
..add(ColorProperty('inputBackgroundColor', inputBackgroundColor))
|
|
|
|
|
..add(ColorProperty('actionButtonColor', actionButtonColor))
|
|
|
|
|
..add(ColorProperty('actionButtonIdleColor', actionButtonIdleColor))
|
|
|
|
|
..add(ColorProperty('sendButtonColor', sendButtonColor))
|
|
|
|
|
..add(ColorProperty('sendButtonIdleColor', sendButtonIdleColor))
|
|
|
|
|
..add(DiagnosticsProperty('inputTextStyle', inputTextStyle))
|
|
|
|
|
..add(DiagnosticsProperty('inputDecoration', inputDecoration))
|
|
|
|
|
..add(DiagnosticsProperty('activeBorderGradient', activeBorderGradient))
|
|
|
|
|
..add(DiagnosticsProperty('idleBorderGradient', idleBorderGradient))
|
|
|
|
|
..add(DiagnosticsProperty('borderRadius', borderRadius))
|
|
|
|
|
..add(ColorProperty('expandButtonColor', expandButtonColor));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|