「ウィジェットに抽出」を実行しようとすると、「囲んでいるクラスメソッドへの参照を抽出できません」というエラーが発生する
クラスコンストラクターからデータを取得する必要があるいくつかの変数があることを知っていますが、Android studioでウィジェットを抽出する必要があります。エラーのないVisual Studioなどの誤ったコードを修正します。新しいウィジェットにコードを記述してから、新しい抽出されたウィジェットを新しいDartファイルにコピーし、間違いを修正する必要があります。
カードウィジェット部分を抽出したいのですが。
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),
),
),
);
});
}
}
「Extract Widget」の代わりに「Extract Method」を使用するだけです。 Flutterはすべての戻り値と参照を追加します。
私は同じ問題を抱えていましたが、私の場合はListView.builderが原因でした。
したがって、修正は簡単です。クラスを作成し、戻りカードをウィジェットビルドそして、それをListView.builderでTransactionListクラス内に希望の引数とともに返します。