android - 重构时无法提取对封闭类方法的引用

标签 android android-studio flutter dart

当我想做“提取到小部件”时,它会引发错误:“无法提取对封闭类方法的引用”

我知道有一些变量必须从类构造函数中获取它们的数据,但我希望 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/

相关文章:

dart - 使用列表访问 dart flutter 中的函数

android - 具有相等行高的表格布局

android - notifyItemChanged 不刷新 View

java - 组织.gradle.process.internal.ExecException : Process 'command finished with non-zero exit value 1

android - 权限拒绝:阅读android.support.v4.content.FileProvider uri ANDROID饼图

android - AutofillManager NPE : trying to invoke virtual method containsKey(java. lang.String)' 在空对象引用上崩溃

Java for 循环总是返回 true

android - Gradle 同步失败 : invalid type code: 6C

firebase - 添加 firebase 依赖后 Flutter 'Packages get' 失败

flutter - 如何使用 flutter bloc 通过使用 firestore 的依赖注入(inject)来处理错误 `The getter was called on null`