gpt4 book ai didi

ios - Flutter 不更新 subwidget

转载 作者:IT王子 更新时间:2023-10-29 06:51:53 25 4
gpt4 key购买 nike

我有一个小部件,其中包含一个子小部件。它在构建方法中获取最后一个新值,如下所示:

children: <Widget>[
AspectRatio(
aspectRatio: 1.0,
child: Container(
padding: const EdgeInsets.all(16.0),
child: CircleWidget(_lastWindSpeed/10, _speed/10),
))
],
),

状态将更新为

setState

但是如果有新值,小部件不会更新。

有人看到那里的问题吗?

类是:

import 'package:flutter/material.dart';
import 'circle_painter.dart';

class CircleWidget extends StatefulWidget {
final double _start;
final double _finish;
CircleWidget(this._start, this._finish);

@override
State<CircleWidget> createState() => new _CircleState();
}

class _CircleState extends State<CircleWidget> with SingleTickerProviderStateMixin{

Animation<double> animation;
double _fraction;

@override
void initState() {
super.initState();
var controller = AnimationController(duration: new Duration(milliseconds: 10), vsync: this);
animation = Tween(begin: widget._start, end: widget._finish).animate(controller)
..addListener((){
setState(() {
_fraction = animation.value;
});
});
controller.forward();
}
@override
Widget build(BuildContext context) {
return new CustomPaint(
painter: new CirclePainter(_fraction));
}
}

非常感谢。

最佳答案

如果您希望动画在 CircleWidget 的值更改时重新启动,您需要使用 didUpdateWidget生命周期。 initState 只被调用一次,而 didUpdateWidget 每次重新创建相应的小部件时都会被调用 - 请注意,如果父小部件也重建,则值可能相同。

@override
void didUpdateWidget(CircleWidget oldWidget) {
if (oldWidget._start != widget._start ||
oldWidget._end != widget._end) {
// values changed, restart animation.
controller
..reset()
..forward();
}
super.didUpdateWidget(oldWidget);
}

关于ios - Flutter 不更新 subwidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50476521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com