调用删除功能在颤振应用程序中不起作用

时间:2021-07-06 19:24:01

标签: flutter dart

在我的 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 应用程序中点击删除按钮时什么也没有发生,有人能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

在您的 TextButton 小部件上,您传递给 onPressed 的函数实际上并未调用 delete,它只是返回 delete 函数本身。您需要调用该函数(并检查它是否为空,因为它是可选的),如下所示:

onPressed: () {
  if (delete != null) {
    delete();
  }
},

或者,您可以这样做:

onPressed: delete,

正如@Lee3 在评论中指出的那样,为了使其正常工作,您需要更具体地了解 delete 属性的类型。它需要声明为:

final void Function()? delete;

原因是 Function 类型本身不够具体,编译器无法检查其正确性。