ValueListenableBuilder(
  valueListenable: _controller,
  builder: (context, VideoPlayerValue value, child) {
    Duration millis = value.duration - value.position;
varseconds = millis.inSeconds;
finaldays = seconds~/Duration.secondsPerDay;
    seconds -= days*Duration.secondsPerDay;
finalhours = seconds~/Duration.secondsPerHour;
    seconds -= hours*Duration.secondsPerHour;
finalminutes = seconds~/Duration.secondsPerMinute;
    seconds -= minutes*Duration.secondsPerMinute;

finalList<String> tokens = [];
if(days != 0) {
      tokens.add('${days}d');
    }
if(tokens.isNotEmpty || hours != 0){
      tokens.add('${hours}h');
    }
if(tokens.isNotEmpty || minutes != 0) {
      tokens.add('${minutes}m');
    }
    tokens.add('${seconds}s');
returnText(tokens.join(':').toString(),
      style: TextStyle(color: Colors.white, fontSize: 12),
    );
  },
): Container(),

ValueListenableBuilder 는 값이 바뀌는걸 지켜보며 리빌드

https://api.flutter.dev/flutter/widgets/ValueListenableBuilder-class.html

https://medium.flutterdevs.com/exploring-valuelistenablebuilder-in-flutter-9a16fc4c4c5b

https://paulaner80.tistory.com/entry/ValueListenableBuilderT

스크린샷 2021-11-06 오후 3.49.40.png