Flutter - #29. TweenAnimationBuilder

Pearl Lee·2021년 7월 6일
0

Flutter Widget

목록 보기
28/50

내가 보려고 쓰는 Flutter 일기
참고1 : https://api.flutter.dev/flutter/widgets/TweenAnimationBuilder-class.html






TweenAnimationBuilder

저번 일기에서 Tween 을 배웠으니, 이번에는 TweenAnimationBuilder를 배워보자.

Tween 이 붙은 이름에서 알 수 있듯이, Tween.begin을 시작값으로 하여 Tween.end로 변할 때까지 애니메이션이 적용된다. 애니메이션의 변화와 시간을 설정하려면 curve, duration 속성을 각각 설정하면 된다.

애니메이션 효과를 결정하는 값(Tween)과 자식 요소는 builder 속성으로 전달되는데, builder 에 함수를 지정하여 Tween.end 에 도달할 때까지 해당 함수가 실행된다. (자식 요소를 builder로 넘겨주게 되면, 애니메이션이 진행되는 동안 앱이 전체 위젯 트리를 다시 빌드하지 않는다고 한다.)

Tween의 타입은 builder의 두 번째 파라미터 타입과, TweenAnimationBuilder 의 타입과 일치해야 한다.

요기까지 알아보고 코드로 넘어가보자.









코드 예시로 알아보자

import 'package:flutter/material.dart';

void main() => runApp(const MyApp());

/// This is the main application widget.
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  static const String _title = 'Flutter Code Sample';

  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: Scaffold(
        appBar: AppBar(title: const Text(_title)),
        body: const Center(
          child: MyStatefulWidget(),
        ),
      ),
    );
  }
}

/// This is the stateful widget that the main application instantiates.
class MyStatefulWidget extends StatefulWidget {
  const MyStatefulWidget({Key? key}) : super(key: key);

  
  State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}

/// This is the private State class that goes with MyStatefulWidget.
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  double targetValue = 120.0;

  
  Widget build(BuildContext context) {
    return TweenAnimationBuilder<double>(
      tween: Tween<double>(begin: 0, end: targetValue),
      duration: const Duration(seconds: 1),
      builder: (BuildContext context, double size, Widget? child) {
        return IconButton(
          iconSize: size,
          color: Colors.blue,
          icon: child!,
          onPressed: () {
            setState(() {
              targetValue = targetValue == 120.0 ? 240.0 : 120.0;
            });
          },
        );
      },
      child: const Icon(Icons.aspect_ratio),
      curve: Curves.easeInCubic,
    );
  }
}

우선 이부분을 보면, Tween의 타입은 builder의 두 번째 파라미터 타입과, TweenAnimationBuilder 의 타입과 일치(double) 한다.

return TweenAnimationBuilder<double>(
      tween: Tween<double>(begin: 0, end: targetValue),
      duration: const Duration(seconds: 1),
      builder: (BuildContext context, double size, Widget? child)

실행화면은 아래와 같다.

double 말고 color도 시도해보려고 하였으나 업데이트 때문인지 예제 코드가 재생이 안된다ㅠㅠ 다음에 다시 해보기로...

오늘의 일기는 여기까지!

profile
안 되면 되게 하라

0개의 댓글