作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!