错误:无法将参数类型“Function”分配给参数类型“void Function()?”

时间:2021-07-20 03:33:54

标签: flutter dart navigation-drawer

我是 flutter 新手,但出现错误:

error : The argument type 'Function' can't be assigned to the parameter type 'void Function()'

我开发了一个用餐应用。

我添加了一个简单的 Drawer()。 打开抽屉时出现错误。

import 'package:flutter/material.dart';
import 'package:recipes/screens/filters_screen.dart';

class MainDrawer extends StatelessWidget {
  Widget buildListTile(String title, IconData icon, Function tapHandler) {
    return ListTile(
        leading: Icon(
          icon,
          size: 26,
        ),
        title: Text(
          title,
          style: TextStyle(
              fontFamily: 'RobotoCondensed',
              fontSize: 24,
              fontWeight: FontWeight.bold),
        ),
        onTap:tapHandler
    );
  }

  @override
  Widget build(BuildContext context) {
    return Drawer(
        child: Column(
      children: [
        Container(
          height: 120,
          width: double.infinity,
          padding: EdgeInsets.all(20),
          alignment: Alignment.centerLeft,
          color: Theme.of(context).accentColor,
          child: Text(
            'Cooking up!',
            style: TextStyle(
                fontWeight: FontWeight.w900,
                fontSize: 30,
                color: Theme.of(context).primaryColor),
          ),
        ),
        SizedBox(
          height: 20,
        ),
        buildListTile('Meals', Icons.restaurant,()  {
          Navigator.of(context).pushNamed('/');
        }),
        buildListTile('Filters', Icons.settings, ()  {
          Navigator.of(context).pushNamed(FiltersScreen.routeName);
        }),
      ],
    ));
  }
}

2 个答案:

答案 0 :(得分:1)

您能否尝试在您的 tapHandler 方法中指定 buildListTile 的类型?

  Widget buildListTile(String title, IconData icon, void Function() tapHandler) {
/* ... The rest of your method */
}

答案 1 :(得分:0)

Dart 支持强函数类型。这意味着,除了类型 Function 之外,您还可以在函数类型中指定参数的类型和返回类型。例如:

String example(int i) => 'Hello $i';

var String Function(int) function = example;

tapHandler 传递给 ListTile.onTap 时遇到的错误基本上是说:“我需要一个不带参数并返回 void 的函数,但是你给了我任何函数”。

例如,您可以调用:

buildListTile('example', Icons.add, (String s) => null)

这不是 void Function() 要求的 ListTile

要修复它,请将 buildListTile 更改为:

Widget buildListTile(String title, IconData icon, void Function() tapHandler) ...