我正在尝试使用传递的类实例来设置状态并访问成员值,但这给了我未在对象上定义的getter错误。但是在initState方法中也是如此。
这用于在用户关闭ShowDialog时传递值。我尝试设置吸气剂,并将班级成员从私人变为公共。
class MyReaction {
IconData _icon;
String _text;
MyReaction(this._icon, this._text);
IconData get iconD => this._icon;
String get textV => this._text;
}
class _MyHomePageState extends State<MyHomePage> {
MyReaction _myreaction = new MyReaction(Icons.thumb_up, 'Like');
IconData _myreactionIcon;
String _myreactionText;
@override
void initState() {
super.initState();
controller = new ScrollController();
_myreactionIcon = _myreaction.iconD; //It works here!!
_myreactionText = _myreaction.textV;
}
FlatButton.icon(
icon:Icon(this._myreactionIcon, size: 24.0),
onPressed: () {
showDemoDialog<MyReaction>(
context: context,
child: SimpleDialog(
title: const Text('Your Reaction'),
children: <Widget>[
DialogDemoItem(
icon: Icons.account_circle,
color: Colors.black87,
text: 'username@gmail.com',
onPressed: () {
MyReaction _reaction = new MyReaction(Icons.account_circle, 'Like');
Navigator.pop(context, _reaction);
},
),
]
)
);
},
);
void showDemoDialog<MyReaction>({ BuildContext context, Widget child }) {
showDialog<MyReaction>(
context: context,
builder: (BuildContext context) => child,
)
.then<void>((MyReaction value) { // The value passed to Navigator.pop() or null.
if (value != null) {
setState(() {
_myreactionIcon = value.iconD; //Does not work here
_myreactionText = value.textV;});
// _scaffoldKey.currentState.showSnackBar(SnackBar(
// content: Text('You selected: $value'),
));
}
});
}
}
我期望showDialog方法中的值可分配给状态变量。但是value.iconD给getter未定义的错误。我在做什么错
答案 0 :(得分:1)
您已在方法showDemoDialog
中添加了一个通用类型参数,该参数遮盖了(隐藏)了对类MyReaction
的定义。
此通用类型参数实际上未在您的方法中使用,因此可以将其删除。
只需这样定义您的方法:
void showDemoDialog({ BuildContext context, Widget child }) {
showDialog<MyReaction>(context: context, builder: (BuildContext context) => child)
.then((MyReaction value) { // The value passed to Navigator.pop() or null.
if (value != null) {
setState(() {
_myreactionIcon = value.iconD; // Does now work
_myreactionText = value.textV;
});
}
}
);
}