我是 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);
}),
],
));
}
}
答案 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) ...