参数类型“Function”不能分配给参数类型“void Function(bool)?”
Posted
技术标签:
【中文标题】参数类型“Function”不能分配给参数类型“void Function(bool)?”【英文标题】:The argument type 'Function' can't be assigned to the parameter type 'void Function(bool)?' 【发布时间】:2022-01-17 05:31:45 【问题描述】:enter image description here
import 'package:flutter/material.dart';
import '../widgets/main_drawer.dart';
class FiltersScreen extends StatefulWidget static const routeName
= '/filtters';
@override State<FiltersScreen> createState() =>
_FiltersScreenState();
class _FiltersScreenState extends State<FiltersScreen> var
_glutenFree = false; var _vegan = false; var _vegetarian = false; var _lactoseFree = false;
Widget _buildSwitchListTile(
String title,
String description,
bool currentValue,
Function updateValue, )
return SwitchListTile(
title: Text(title),
subtitle: Text(description),
value: currentValue,
onChanged: updateValue,
);
@override Widget build(BuildContext context)
return Scaffold(
drawer: MainDrawer(),
appBar: AppBar(
title: Text('Filtters'),
),
body: Column(
children: <Widget>[
Container(
padding: EdgeInsets.all(20),
child: Text(
'Adjust Your Meal Selection!',
style: Theme.of(context).textTheme.subtitle1,
),
),
Expanded(
child: ListView(
children: <Widget>[
_buildSwitchListTile(
'Gluten-Free',
'Only Include Gluten-Free Meals.',
_glutenFree,
setState(
(newValue)
_glutenFree = newValue;
,
),
),
],
),
)
],
),
);
我尝试将 Function updateValue 更改为 final Function(bool newValue) updateValue 但我在 setState =>> 中得到一个问题,问题是 (
此表达式的类型为“void”,因此无法使用其值。尝试 检查您是否使用了正确的 API;可能有一个 函数或调用返回你没想到的 void。还要检查类型 也可能为 void 的参数和变量
)
【问题讨论】:
【参考方案1】:将参数updateValue
的类型从Function
更改为void Function(bool)?
:
Widget _buildSwitchListTile(
String title,
String description,
bool currentValue,
void Function(bool)? updateValue,
)
return SwitchListTile(
title: Text(title),
subtitle: Text(description),
value: currentValue,
onChanged: updateValue,
);
【讨论】:
【参考方案2】:这里是如何修复它,首先如你所说,改变
Function onChanged,
到这里:
void Function(bool) onChanged,
这意味着onChanged
会有一个参数,并且不会返回任何东西,所以当你传递它时,你需要使用一个lambda函数:
_buildSwitchListTile(
'Gluten-Free',
'Only Include Gluten-Free Meals.',
_glutenFree,
(newValue) => setState(
()
_glutenFree = newValue;
,
),
),
【讨论】:
以上是关于参数类型“Function”不能分配给参数类型“void Function(bool)?”的主要内容,如果未能解决你的问题,请参考以下文章
参数类型“Function”不能分配给参数类型“void Function()?”在零安全之后
参数类型“Widget Function(Categoria)”不能分配给参数类型“dynamic Function(Child)”。 (型号)颤振
Flutter中的参数类型'Widget Function(BuildContext)'不能分配给参数类型'Widget Function(BuildContext,Widget)'错误
参数类型“字符串”不能分配给参数类型“对象?函数(对象?,对象?)?
参数类型 'List<Todo>? Function(QuerySnapshot<Object?>)' 不能分配给参数类型 'List<Todo> Function
参数类型“Map<String, dynamic> Function()”不能分配给参数类型“Map<String, dynamic>”