#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);
}),
],
));
}
}
Ответ №1:
Можете ли вы попытаться указать тип tapHandler
в своем buildListTile
методе?
Widget buildListTile(String title, IconData icon, void Function() tapHandler) {
/* ... The rest of your method */
}
Ответ №2:
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) ...