在我的 main.dart 文件中,我定义了一个函数 delete
body: Column(
children: quotes.map((quote) => QuoteCard(
quote: quote,
delete: () {
setState(() {
quotes.remove(quote);
});
}
)).toList(),
),
floatingActionButton: FloatingActionButton(
onPressed: (){
print('hello');
},
child: Icon(Icons.add),
),
);
}
}
该函数在类内的 quote_card.dart 文件中被调用,并作为参数传递,点击文本按钮(最后一个小部件)时不执行任何操作。
class QuoteCard extends StatelessWidget {
final Quote quote;
final Function? delete;
QuoteCard({ required this.quote, this.delete });
@override
Widget build(BuildContext context) {
return Card(
margin: const EdgeInsets.fromLTRB(16.0, 16.0, 16.0, 0),
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
quote.text,
style: TextStyle(
fontSize: 18.0,
color: Colors.grey[600],
),
),
SizedBox(height: 6.0),
Text(
quote.author,
style: TextStyle(
fontSize: 14.0,
color: Colors.grey[800],
),
),
SizedBox(height: 8.0),
TextButton.icon(
onPressed: () => delete,
label: Text('delete quote'),
icon: Icon(Icons.delete),
)
当我在我的 flutter 应用程序中点击删除按钮时什么也没有发生,有人能帮我解决这个问题吗?
答案 0 :(得分:1)
在您的 TextButton
小部件上,您传递给 onPressed
的函数实际上并未调用 delete
,它只是返回 delete
函数本身强>。您需要调用该函数(并检查它是否为空,因为它是可选的),如下所示:
onPressed: () {
if (delete != null) {
delete();
}
},
或者,您可以这样做:
onPressed: delete,
正如@Lee3 在评论中指出的那样,为了使其正常工作,您需要更具体地了解 delete
属性的类型。它需要声明为:
final void Function()? delete;
原因是 Function
类型本身不够具体,编译器无法检查其正确性。