当我想做“提取到小部件”时,它会引发错误:“无法提取对封闭类方法的引用”
我知道有一些变量必须从类构造函数中获取它们的数据,但我希望 Android Studio 提取小部件,然后我将更正错误的代码,比如 Visual Studio,它没有任何错误地将代码提取到新的小部件,然后它需要将新提取的小部件复制到新的 dart 文件并更正错误。
我想提取 Card 小部件部分。
import 'package:flutter/material.dart';
import 'package:flutter/material.dart' as prefix0;
import 'package:intl/intl.dart';
import '../model/transaction.dart';
class TransactionList extends StatelessWidget {
final List<Transaction> transactions;
final Function deleteTx;
TransactionList(this.transactions, this.deleteTx);
@override
Widget build(BuildContext context) {
return transactions.isEmpty
? LayoutBuilder(
builder: (ctx, constraint) {
return Column(
children: <Widget>[
Text(
'There is no transaction',
style: Theme.of(context).textTheme.title,
textDirection: prefix0.TextDirection.rtl,
),
SizedBox(
height: 10,
),
Container(
height: constraint.maxHeight * 0.6,
child: Image.asset(
'assets/images/yalda.png',
fit: BoxFit.cover,
))
],
);
},
)
: ListView.builder(
itemCount: transactions.length,
itemBuilder: (ctx, index) {
return **Card**(
margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 5),
elevation: 5,
child: ListTile(
leading: CircleAvatar(
radius: 30,
child: Padding(
padding: const EdgeInsets.all(8),
child: FittedBox(
child: Text('\$${transactions[index].amount}')),
),
),
title: Text(
transactions[index].title,
style: Theme.of(context).textTheme.title,
),
subtitle: Text(DateFormat.yMMMd()
.format(transactions[index].date)
.toString()),
trailing: MediaQuery.of(context).size.width > 360
? FlatButton.icon(
onPressed: () => deleteTx(transactions[index].id),
icon: const Icon(Icons.delete),
label: const Text('Delete'),
textColor: Theme.of(context).errorColor,
)
: IconButton(
icon: const Icon(Icons.delete),
color: Theme.of(context).errorColor,
onPressed: () => deleteTx(transactions[index].id),
),
),
);
});
}
}
最佳答案
只需使用“提取方法”而不是“提取小部件”。 VSCode 将添加所有返回和引用。
编辑:如果您只想使用“提取小部件”,那么只需将该小部件包装在一个容器中,然后在该小部件上使用“提取小部件”。
如果这不起作用,请注释掉小部件内的 setState() 函数,然后重试。
关于android - 重构时无法提取对封闭类方法的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59636786/