Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振错误:类型';(字符串,ItemPriority)=>;无效';不是类型为';(字符串,[ItemPriority])=>;动态';_Flutter_Dart_Flutter Layout - Fatal编程技术网

Flutter 颤振错误:类型';(字符串,ItemPriority)=>;无效';不是类型为';(字符串,[ItemPriority])=>;动态';

Flutter 颤振错误:类型';(字符串,ItemPriority)=>;无效';不是类型为';(字符串,[ItemPriority])=>;动态';,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我是一个新来的颤栗和工作在一个简单的待办事项列表应用程序。对于主页,我希望有一个待办事项列表和一个按钮来添加新的待办事项。点击“新建”按钮将弹出一个窗口,为待办事项键入标题,并使用我的自定义单选按钮添加1-5之间的优先级。单击此窗口上的“发送/提交”按钮应将其添加到待办事项列表(显示在列表视图中) 我得到了这个错误:type'(String,ItemPriority)=>void'不是type'(String,[ItemPriority])=>dynamic'的子类型 它来自第79行“TodoI

我是一个新来的颤栗和工作在一个简单的待办事项列表应用程序。对于主页,我希望有一个待办事项列表和一个按钮来添加新的待办事项。点击“新建”按钮将弹出一个窗口,为待办事项键入标题,并使用我的自定义单选按钮添加1-5之间的优先级。单击此窗口上的“发送/提交”按钮应将其添加到待办事项列表(显示在列表视图中)

我得到了这个错误:type'(String,ItemPriority)=>void'不是type'(String,[ItemPriority])=>dynamic'的子类型

它来自第79行“TodoInputWidget(this.newToDoToItem)”,我已经尝试跟踪错误的原因,但我不确定我是否完全理解它。我找不到任何地方可以列出项目优先级

我真的很感激任何关于这个问题的见解

以下是我现在掌握的代码:

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]),
        );
      },
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“textInputWidget.dart”;
void main(){
runApp(MyApp());
}
枚举项优先级{low,low_-med,med,med_-high,high}
扩展项优先级扩展项优先级{
无线电模型获取无线电{
开关(本){
case itempority.low:
返回新的RadioModel(真,“1”,颜色为绿色);
案例ItemPriority.low\u med:
返回新的RadioModel(真,'2',颜色。浅绿色);
case ItemPriority.med:
返回新的RadioModel(真,'3',颜色。黄色);
案例ItemPriority.med_高:
返回新的RadioModel(真,'2',颜色为橙色);
案例项目优先级。高:
返回新的RadioModel(真,'2',颜色。红色);
违约:
返回新的RadioModel(真,'3',颜色。黄色);
}
}
}
类TodoItem{
字符串任务;
项目优先级;
TodoItem(this.task,this.priority);
}
类无线电模型{
布尔当选;
字符串radioNumText;
颜色;
RadioModel(this.isSelected、this.radioNumText、this.color);
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“每周待办事项”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:MyHomePage(),
);
}
}
类MyHomePage扩展StatefulWidget{
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
列出待办事项=[];
void newTodoItem(字符串文本,ItemPriority){
此.setState(){
添加(新的TodoItem(文本,优先级));
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“每周待办事项”),
正文:专栏(
儿童:[
扩展(子级:TodoList(this.todos)),
TodoInputWidget(此.newTodoItem),
],
),
);
}
}
类TodoInputWidget扩展了StatefulWidget{
最终函数(字符串,[ItemPriority])回调;
TodoInputWidget(this.callback);
@凌驾
_TodoInputWidgetState createState()=>TodoInputWidgetState();
}
类_TodoInputWidgetState扩展状态{
字符串文本;
项目优先级;
CustomRadio radio=新的CustomRadio(ItemPriority.med);
bool selected=false;
void createTodo(字符串文本){
此.setState(){
回调(文本、收音机、优先级);
});
}
createTodoWindow(构建上下文){
返回显示对话框(
上下文:上下文,
生成器:(上下文)=>SimpleDialog(
标题:文本(“创建新任务”),
children:[收音机,TextInputWidget(this.createTodo)],
));
}
@凌驾
小部件构建(构建上下文){
返回手势检测器(
onTap:(){
createTodoWindow(上下文);
},
子:容器(
对齐:对齐.center,
装饰:盒子装饰(
形状:BoxShape.circle,
颜色:颜色。绿色,
),
),
);
}
}
类TodoList扩展了StatefulWidget{
最终待办事项清单;
托多利斯特(this.todoItems);
@凌驾
_TodoListState createState()=>\u TodoListState();
}
类_TodoListState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回ListView.builder(
itemCount:this.widget.todoItems.length,
itemBuilder:(上下文,索引){
var todoItem=this.widget.todoItems[index];
返回ListTile(标题:Text(todoItem.task));
},
);
}
}
类RadioItem扩展了无状态小部件{
最终无线电模型项目;
放射性透射电镜(本项目);
@凌驾
小部件构建(构建上下文){
返回容器(
子项:文本(项radioNumText),
装饰:盒子装饰(
形状:BoxShape.circle,
颜色:item.color,
),
对齐:对齐.center,
);
}
}
//忽略:必须是不可变的
类CustomRadio扩展StatefulWidget{
项目优先级;
海关无线电(此。优先级);
@凌驾
_CustomRadioState createState()=>\u CustomRadioState();
}
类_CustomRadioState扩展状态{
List priorityChoices=新列表();
项目优先级;
@凌驾
void initState(){
super.initState();
widget.priority=优先级;
priorityChoices.add(ItemPriority.low.radio);
priorityChoices.add(ItemPriority.low_med.radio);
priorityChoices.add(ItemPriority.med.radio);
优先级选择。添加(ItemPriority.med_high.radio);
priorityChoices.add(ItemPriority.high.radio);
}
@凌驾
小部件构建(构建上下文){
返回ListView.builder(
滚动方向:轴水平,
itemCount:priorityChoices.length,
itemBuilder:(上下文,索引){
返回图标按钮(
已按下:(){
优先选择forEach((元素){
element.isSelected=false;
});
priorityChoices[index].isSelected=true;
优先级=项目优先级。值[索引];
  dynamic newTodoItem(String text, [ItemPriority priority]) {
     this.setState(() {
       todos.add(new TodoItem(text, priority));
     });
     return some.. or null;
  }