颤振错误:类型"(字符串,项目优先级)=> void"不是类型"(字符串,[项目优先级])=>动态"的子类型



我是Flutter的新手,正在开发一个简单的待办事项列表应用程序。对于主页,我想要一个待办事项列表和一个添加新待办事项的按钮。点击"新"按钮应该会弹出一个窗口,为待办事项键入标题,并使用我的自定义单选按钮添加1-5的优先级。单击此窗口上的发送/提交按钮应将其添加到待办事项列表中(显示在ListView中(。

我收到以下错误:类型'(String,ItemPriority(=>void"不是类型"的子类型(String,[ItemPriority](=>动态

它来自79〃线;TodoInputWidget(this.newTodoItem(;我已经试图追踪错误的原因,但我不确定我是否完全理解。我找不到任何地方可以生成ItemPrioritys列表。

我真的很感激对这个问题的任何见解!

这是我现在的代码:

import 'package:flutter/material.dart';
import 'textInputWidget.dart';
void main() {
runApp(MyApp());
}
enum ItemPriority { low, low_med, med, med_high, high }
extension ItemPriorityExtension on ItemPriority {
RadioModel get radio {
switch (this) {
case ItemPriority.low:
return new RadioModel(true, '1', Colors.green);
case ItemPriority.low_med:
return new RadioModel(true, '2', Colors.lightGreen);
case ItemPriority.med:
return new RadioModel(true, '3', Colors.yellow);
case ItemPriority.med_high:
return new RadioModel(true, '2', Colors.orange);
case ItemPriority.high:
return new RadioModel(true, '2', Colors.red);
default:
return new RadioModel(true, '3', Colors.yellow);
}
}
}
class TodoItem {
String task;
ItemPriority priority;
TodoItem(this.task, this.priority);
}
class RadioModel {
bool isSelected;
String radioNumText;
Color color;
RadioModel(this.isSelected, this.radioNumText, this.color);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Weekly ToDo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<TodoItem> todos = [];
void newTodoItem(String text, ItemPriority priority) {
this.setState(() {
todos.add(new TodoItem(text, priority));
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Weekly ToDo')),
body: Column(
children: <Widget>[
Expanded(child: TodoList(this.todos)),
TodoInputWidget(this.newTodoItem),
],
),
);
}
}
class TodoInputWidget extends StatefulWidget {
final Function(String, [ItemPriority]) callback;
TodoInputWidget(this.callback);
@override
_TodoInputWidgetState createState() => _TodoInputWidgetState();
}
class _TodoInputWidgetState extends State<TodoInputWidget> {
String text;
ItemPriority priority;
CustomRadio radio = new CustomRadio(ItemPriority.med);
bool selected = false;
void createTodo(String text) {
this.setState(() {
widget.callback(text, radio.priority);
});
}
createTodoWindow(BuildContext context) {
return showDialog(
context: context,
builder: (context) => SimpleDialog(
title: Text('Create new task'),
children: <Widget>[radio, TextInputWidget(this.createTodo)],
));
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
createTodoWindow(context);
},
child: Container(
alignment: Alignment.center,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.green,
),
),
);
}
}
class TodoList extends StatefulWidget {
final List<TodoItem> todoItems;
TodoList(this.todoItems);
@override
_TodoListState createState() => _TodoListState();
}
class _TodoListState extends State<TodoList> {
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: this.widget.todoItems.length,
itemBuilder: (context, index) {
var todoItem = this.widget.todoItems[index];
return ListTile(title: Text(todoItem.task));
},
);
}
}
class RadioItem extends StatelessWidget {
final RadioModel item;
RadioItem(this.item);
@override
Widget build(BuildContext context) {
return Container(
child: Text(item.radioNumText),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: item.color,
),
alignment: Alignment.center,
);
}
}
//ignore: must_be_immutable
class CustomRadio extends StatefulWidget {
ItemPriority priority;
CustomRadio(this.priority);
@override
_CustomRadioState createState() => _CustomRadioState();
}
class _CustomRadioState extends State<CustomRadio> {
List<RadioModel> priorityChoices = new List<RadioModel>();
ItemPriority priority;
@override
void initState() {
super.initState();
widget.priority = priority;
priorityChoices.add(ItemPriority.low.radio);
priorityChoices.add(ItemPriority.low_med.radio);
priorityChoices.add(ItemPriority.med.radio);
priorityChoices.add(ItemPriority.med_high.radio);
priorityChoices.add(ItemPriority.high.radio);
}
@override
Widget build(BuildContext context) {
return ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: priorityChoices.length,
itemBuilder: (context, index) {
return IconButton(
onPressed: () {
priorityChoices.forEach((element) {
element.isSelected = false;
});
priorityChoices[index].isSelected = true;
priority = ItemPriority.values[index];
},
icon: RadioItem(priorityChoices[index]),
);
},
);
}
}

替换函数;

dynamic newTodoItem(String text, [ItemPriority priority]) {
this.setState(() {
todos.add(new TodoItem(text, priority));
});
return some.. or null;
}

最新更新