2021.10.12.火曜日開発ログ
🚪 Closed
🙆♀️ Exception caught by animation library
Failed assertion: line xxxx pos xx: '_lifecycleState != _ElementLifecycle.defunct': is not true.
仕事は正常ですが、その間違いは気が狂ったように降りて、たくさん食べて転がりました.そのため、console
でログを見るのも不便です.
エラーコード部分は以下の通りです.animation.addListener(() {
setState(() {}); //update UI on every animation value update
});
setState()
は、反応が遅い不良使用例である.
これを4つの動画に掛けて、実際に使っているのは6つで、スクロールしか食べられません.
✔️ Solved
AnimatedWidget
は、addListener()
とsetState
の代わりにアニメーションを支援します.
従来のコードは6つあり、以下のPositioned()
である.Positioned(
bottom: 10,
right: animation.value,
child: ClipPath(
clipper: MyWaveClipper(),
child: Opacity(
opacity: 0.35,
child: Container(
color: EmotionColor
.getDarkColorFor(
randomEmotion),
width: 900,
height: 200,
),
),
),),
下図に示すように、それぞれの水波の異なる部分とアニメーションをパラメータとしたAnimatedWidget
を作成し、上のPositioned()
を返します.class AnimatedWave extends AnimatedWidget {
final Color color;
final double opacity;
final double bottom;
/// 0: left
/// 1: right
final int direction;
const AnimatedWave({
Key key,
Animation<double> animation,
this.bottom,
this.opacity,
this.color,
this.direction,
}): super(key: key, listenable: animation);
@override
Widget build(BuildContext context) {
final animation = listenable as Animation<double>;
double left, right;
if (direction == 1) {
right = animation.value;
} else {
left = animation.value;
}
return Positioned(
bottom: bottom,
left : left,
right: right,
child: ClipPath(
clipper: MyWaveClipper(),
child: Opacity(
opacity: opacity,
child: Container(
color: color,
width: 900,
height: 200,
),
),
),
);
}
}
また、呼び出し部分では、以下の変更部分のみをコード表示に変換します.AnimatedWave(
animation: animation,
bottom: 10,
opacity: 0.35,
color: EmotionColor.getDarkColorFor(randomEmotion),
direction: 1,
),
今はコンソールの窓が静かになりましたハハ
(私はこれをするために、前回アニメの修正バージョンを作りました...私のBig Pictureが成功して、とても嬉しいです)
ヘルプリンク
Failed assertion: line xxxx pos xx: '_lifecycleState != _ElementLifecycle.defunct': is not true.
animation.addListener(() {
setState(() {}); //update UI on every animation value update
});
Positioned(
bottom: 10,
right: animation.value,
child: ClipPath(
clipper: MyWaveClipper(),
child: Opacity(
opacity: 0.35,
child: Container(
color: EmotionColor
.getDarkColorFor(
randomEmotion),
width: 900,
height: 200,
),
),
),),
class AnimatedWave extends AnimatedWidget {
final Color color;
final double opacity;
final double bottom;
/// 0: left
/// 1: right
final int direction;
const AnimatedWave({
Key key,
Animation<double> animation,
this.bottom,
this.opacity,
this.color,
this.direction,
}): super(key: key, listenable: animation);
@override
Widget build(BuildContext context) {
final animation = listenable as Animation<double>;
double left, right;
if (direction == 1) {
right = animation.value;
} else {
left = animation.value;
}
return Positioned(
bottom: bottom,
left : left,
right: right,
child: ClipPath(
clipper: MyWaveClipper(),
child: Opacity(
opacity: opacity,
child: Container(
color: color,
width: 900,
height: 200,
),
),
),
);
}
}
AnimatedWave(
animation: animation,
bottom: 10,
opacity: 0.35,
color: EmotionColor.getDarkColorFor(randomEmotion),
direction: 1,
),
Reference
この問題について(2021.10.12.火曜日開発ログ), 我々は、より多くの情報をここで見つけました https://velog.io/@alphachip/2021.10.12.화요일-개발-일지テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol