MotionText constructor
MotionText({
- Key? key,
- required String text,
- required TextStyle style,
- required Map<
MontageAnimation, MotionWidgetBuilder> wordMotion, - required Map<
MontageAnimation, MotionWidgetBuilder> characterMotion, - List<
MontageAnimation> reversedCharacterAnimation = const <MontageAnimation>[], - Curve characterCurve = Curves.easeInOut,
- double characterStartTime = 0.0,
- double characterEndTime = 1.0,
- double characterOverlapTime = 0.0,
Implementation
factory MotionText({
Key? key,
required String text,
required TextStyle style,
required Map<MontageAnimation, MotionWidgetBuilder> wordMotion,
required Map<MontageAnimation, MotionWidgetBuilder> characterMotion,
List<MontageAnimation> reversedCharacterAnimation =
const <MontageAnimation>[],
Curve characterCurve = Curves.easeInOut,
double characterStartTime = 0.0,
double characterEndTime = 1.0,
double characterOverlapTime = 0.0,
}) {
assert(text.isNotEmpty);
assert(characterStartTime >= 0.0);
assert(characterEndTime <= 1.0);
assert(characterEndTime > characterStartTime);
assert(characterOverlapTime >= 0.0 && characterOverlapTime <= 1.0);
final rawCharacters = <Text>[];
for (var i = 0; i < text.length; i++) {
final character = text[i];
rawCharacters.add(
Text(
character,
style: style,
),
);
}
final motionCharacters = [
...Motion.staggered(
children: <Widget>[...rawCharacters],
motion: (child, i, forward, backward) {
return characterMotion.map(
(key, value) => MapEntry(
key,
Motions.curved(
reversedCharacterAnimation.contains(key) ? backward : forward,
value,
),
),
);
},
overlap: characterOverlapTime,
start: characterStartTime,
end: characterEndTime,
),
];
return MotionText.letters(
key: key,
rawCharacters: rawCharacters,
motionCharacters: motionCharacters,
motion: wordMotion,
);
}