gpt4 book ai didi

dart - dart- `this`是否取决于调用点

转载 作者:行者123 更新时间:2023-12-03 04:40:37 24 4
gpt4 key购买 nike

class mButton extends StatefulWidget{
final VoidCallback onPressed;
final Widget child;

const mButton({Key key, this.onPressed, this.child}):super(key: key);

@override
_mButtonState createState()=>_mState();
}

class _mButtonState extends State<mButton>{
@override
Widget build(BuildContext context){

return Container(
child: RaisedButton(
color: _getColors(), #notice this line
child: widget.child,
onPressed: widget.onPressed,
)
);
}

Color _getColors(){
return _buttonColors.putIfAbsent(this, ()=> colors[next(0,5)]); #notice `this` in here
}

Map<_mButtonState, Color> _buttonColors = {};
final _random = Random();
int next(int min, int max) => min+_random.nextInt(max-min);
List<Color> colors = [
Colors.blue,
Colors.green,
Colors.orange,
Colors.purple,
Colors.amber,
Colors.lightBlue
];

}
在上面的代码中,请注意标有 #notice的两行。 this关键字应该引用当前的类实例,但是从上面的代码中,它几乎给人的印象是 _getColors()方法试图使 this引用每个实例化的 RaisedButton的每个新实例。
我有点困惑, this是否引用 _mButtonState的实例
实例化 RaisedButton的每个新实例(这将通过实例化mButton有状态小部件来完成)?

最佳答案

it almost makes the impression that the _getColors() method is trying to make this refer to every new instance of RaisedButton instantiated


这实际上是不可能的,因为只有在调用 RaisedButton之后(因为 _getColors()的返回值传递到 _getColors()的构造函数中),才能创建 RaiseButton实例。 this将是 _mButtonState。尽管 this在JavaScript中可能会有些困惑,但在Dart中,您始终可以通过查看方法的定义来知道 this是什么,而无需考虑其调用方式/位置。

关于dart - dart- `this`是否取决于调用点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63329481/

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