MotionText constructor

MotionText({
  1. Key? key,
  2. required String text,
  3. required TextStyle style,
  4. required Map<MontageAnimation, MotionWidgetBuilder> wordMotion,
  5. required Map<MontageAnimation, MotionWidgetBuilder> characterMotion,
  6. List<MontageAnimation> reversedCharacterAnimation = const <MontageAnimation>[],
  7. Curve characterCurve = Curves.easeInOut,
  8. double characterStartTime = 0.0,
  9. double characterEndTime = 1.0,
  10. 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,
  );
}