我有一个数量需要在父小部件中更新。按子小部件中的 + 或 - 图标时需要更新数量。我将回调函数传递给了子无状态小部件,但它不起作用。相反,我收到一条错误消息,指出在构建期间调用了 setstate() 或 markneedsbuild() 。
这是父小部件
class Wash extends StatefulWidget {
@override
_WashState createState() => _WashState();
}
class _WashState extends State<Wash> {
int quantity = 0;
void updateQuantity(command) {
if (command == 'add') {
setState(() {
quantity++;
});
} else {
setState(() {
quantity--;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: OrderTile(
imgPath: 'shorts',
itemType: 'Shorts',
quantityCallBack: updateQuantity,
),
);
}
Run Code Online (Sandbox Code Playgroud)
这是子部件
class OrderTile extends StatelessWidget {
OrderTile({this.itemType, this.imgPath, this.quantityCallBack});
final String …Run Code Online (Sandbox Code Playgroud) 我正在调用类中的函数来更新列表对象。我已成功获取所需的对象并更改其中的值。如何更新回原始列表?
这是我的代码:
void updateTask(
Guid id, String title, String start, String end, String timeleft) {
final taskToBeUpdated = _tasks.firstWhere((element) => element.id == id);
taskToBeUpdated.title = title;
taskToBeUpdated.start = start;
taskToBeUpdated.end = end;
taskToBeUpdated.timeLeft = timeleft;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用 forloop 来实现这一点
for (var i = 0; i < _tasks.length; i++) {
if (_tasks[i].id == id) {
_tasks[i].title = title;
_tasks[i].start = start;
_tasks[i].end = end;
_tasks[i].timeLeft = timeleft;
}
}
Run Code Online (Sandbox Code Playgroud)
但有没有更短的方法呢?