如何将一个函数移动到一个单独的方法中?

How to move a function into a separate method?

我有一个在单击 ListTile 时调用的函数。我需要将它移到一个单独的方法中。该函数在 onTap 中。我想把它放在构建之外的一个单独的方法中。我该怎么做?

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Consumer<EventListProvider>(
        builder: (context, listModel, child) {
          return ListView.builder(
            itemCount: listModel.eventList.length,
            itemBuilder: (context, index) {
              return Container(
                child: ListTile(
                    title: Text(
                      listModel.eventList[index].title,
                      style: const TextStyle(
                        color: Colors.black87,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    subtitle: Text(
                      listModel.eventList[index].detail,
                      style: const TextStyle(
                        color: Colors.black45,
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    onTap: () {
                      final event =
                          listModel.getEvent(listModel.eventList[index].id);
                      if (event != null) {
                        showModalBottomSheet<void>(
                          context: context,
                          builder: (BuildContext context) {
                            return EditEventBottomSheet(event: event);
                          },
                        );
                      }
                    }),
              );
            },
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _addEvent,
        child: const Icon(Icons.add),
      ),
    );
  }
}

构建之外的方法:

_onTap(int index, BuildContext context, ??? listModel) {
                  final event =
                      listModel.getEvent(listModel.eventList[index].id);
                  if (event != null) {
                    showModalBottomSheet<void>(
                      context: context,
                      builder: (BuildContext context) {
                        return EditEventBottomSheet(event: event);
                      },
                    );
                  }

在构建方法中:

child: ListTile(
                // ...
                onTap: () => _onTap(index, context, listmodel),

您需要将 ??? 替换为 listmodel 变量的实际类型,我在您的代码中看不到它。