Flutter / Dart - необработанное исключение: тип String не является подтипом типа int of index

Я новичок в Flutter и в настоящее время слежу за учебником по созданию планировщика задач (https://www.youtube.com/watch?v=xJSestoFlJ8&list=PLF9bFmu3NqWqchwS3DO9MDSl15IiHQWcr&index=9)

После переписывания кода вручную (база данных и т. Д.), Когда я перезапустил приложение, чтобы показать элементы, которые я сохранил в базе данных, в консоли отладки, я получил сообщение об ошибке при работе с initstate и setstate

Unhandled Exception: type 'String' is not a subtype of type 'int' of 'index'

Вот код, связанный с ошибкой

final TextEditingController _textEditingController = TextEditingController();
  var db = DatabaseHelper();

  @override
  void initState() {
    super.initState();

    _readTaskList();
  }

  void _handleSubmitted(String text) async {
    _textEditingController.clear();

    Tasks tasksItem = Tasks(text, DateTime.now().toIso8601String());
    int savedItemId = await db.saveItem(tasksItem);

    print("Item saved ID: $savedItemId");

  }

_readTaskList() async {
    List items = await db.getItems();
    items.forEach((item) {
      Tasks tasksItem = Tasks.map(items);
      print("DB Items: ${tasksItem.itemName}");
    });
  }

и вот полный журнал консоли отладки

E/flutter ( 8249): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type 'String' is not a subtype of type 'int' of 'index'
E/flutter ( 8249): #0      new Tasks.map 
package:gatorblocks_rbt/models/tasks.dart:12
E/flutter ( 8249): #1      _TaskPlannerState._readTaskList.<anonymous closure> 
package:gatorblocks_rbt/pages/taskPlanner.dart:105
E/flutter ( 8249): #2      List.forEach  (dart:core-patch/growable_array.dart:285:8)
E/flutter ( 8249): #3      _TaskPlannerState._readTaskList 
package:gatorblocks_rbt/pages/taskPlanner.dart:104
E/flutter ( 8249): <asynchronous suspension>
E/flutter ( 8249): #4      _TaskPlannerState.initState 
package:gatorblocks_rbt/pages/taskPlanner.dart:24
E/flutter ( 8249): #5      StatefulElement._firstBuild 
package:flutter/…/widgets/framework.dart:4355
E/flutter ( 8249): #6      ComponentElement.mount 
package:flutter/…/widgets/framework.dart:4201
E/flutter ( 8249): #7      Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3194
E/flutter ( 8249): #8      Element.updateChild 
package:flutter/…/widgets/framework.dart:2988
E/flutter ( 8249): #9      SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5445
E/flutter ( 8249): #10     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3194
E/flutter ( 8249): #11     Element.updateChild 
package:flutter/…/widgets/framework.dart:2988
E/flutter ( 8249): #12     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:4243
E/flutter ( 8249): #13     Element.rebuild 
package:flutter/…/widgets/framework.dart:3947
E/flutter ( 8249): #14     ComponentElement._firstBuild 
package:flutter/…/widgets/framework.dart:4206
E/flutter ( 8249): #15     ComponentElement.mount 
package:flutter/…/widgets/framework.dart:4201
E/flutter ( 8249): #16     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3194
E/flutter ( 8249): #17     Element.updateChild 
package:flutter/…/widgets/framework.dart:2988
E/flutter ( 8249): #18     SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5445
E/flutter ( 8249): #19     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3194
E/flutter ( 8249): #20     Element.updateChild 
package:flutter/…/widgets/framework.dart:2988
E/flutter ( 8249): #21     SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5445
E/flutter ( 8249): #22     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3194
E/flutter ( 8249): #23     Element.updateChild 
package:flutter/…/widgets/framework.dart:2988
E/flutter ( 8249): #24     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:4243
E/flutter ( 8249): #25     Element.rebuild 
package:flutter/…/widgets/framework.dart:3947
E/flutter ( 8249): #26     ComponentElement._firstBuild 
package:flutter/…/widgets/framework.dart:4206
E/flutter ( 8249): #27     StatefulElement._firstBuild 
package:flutter/…/widgets/framework.dart:4381
E/flutter ( 8249): #28     ComponentElement.mount 
package:flutter/…/widgets/framework.dart:4201
E/flutter ( 8249): #29     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3194
E/flutter ( 8249): #30     Element.updateChild 
package:flutter/…/widgets/framework.dart:2988
E/flutter ( 8249): #31     SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5445
E/flutter ( 8249): #32     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3194
E/flutter ( 8249): #33     Element.updateChild 
package:flutter/…/widgets/framework.dart:2988
E/flutter ( 8249): #34     SingleChildRenderObjectElement.mount 
package:flutter/…/widgets/framework.dart:5445
E/flutter ( 8249): #35     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3194
E/flutter ( 8249): #36     Element.updateChild 
package:flutter/…/widgets/framework.dart:2988
E/flutter ( 8249): #37     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:4243
E/flutter ( 8249): #38     Element.rebuild 
package:flutter/…/widgets/framework.dart:3947
E/flutter ( 8249): #39     ComponentElement._firstBuild 
package:flutter/…/widgets/framework.dart:4206
E/flutter ( 8249): #40     StatefulElement._firstBuild 
package:flutter/…/widgets/framework.dart:4381
E/flutter ( 8249): #41     ComponentElement.mount 
package:flutter/…/widgets/framework.dart:4201
E/flutter ( 8249): #42     Element.inflateWidget 
package:flutter/…/widgets/framework.dart:3194
E/flutter ( 8249): #43     Element.updateChild 
package:flutter/…/widgets/framework.dart:2988
E/flutter ( 8249): #44     ComponentElement.performRebuild 
package:flutter/…/widgets/framework.dart:4243
E/flutter ( 8249): #45     Element.rebuild (package:flutte

Вот скриншот

Приложение работает отлично, оно не дает сбоев или чего-то еще, просто не может правильно отобразить элементы, которые я сохранил в базе данных.


person Jonathan K.    schedule 05.05.2020    source источник


Ответы (1)


Вы получаете сообщение об ошибке, потому что помещаете int в виджет Text, который принимает String.

Вы можете решить эту проблему, преобразовав int с помощью метода toString().

Проверьте код ниже: замените его своей handleSubmitted функцией:

  void _handleSubmitted(String text) async {
    _textEditingController.clear();

    Tasks tasksItem = Tasks(text, DateTime.now().toIso8601String());
    int savedItemId = await db.saveItem(tasksItem);

    // convert savedItemId to a string using toString() method
    print("Item saved ID: $savedItemId.toString()");

  }

Надеюсь, это поможет.

ОБНОВЛЕНО. Пройдя код, я вижу, что вы пытаетесь получить доступ к полю id, которое вы не определили в своем Tasks конструкторе. Почему вы получаете сообщение об ошибке: Type String is not a subtype of int index

Надеюсь, это решит вашу ошибку.

person void    schedule 05.05.2020
comment
Спасибо за проверку кода, очень признателен. Я новичок в программировании и не совсем понимаю, что мне делать с этой информацией. Я пошел дальше и добавил id в конструктор задач, но теперь он говорит, что ему не передается достаточно аргументов при вызове. prnt.sc/sb5nsg - person Jonathan K.; 05.05.2020
comment
Вам нужно найти все экземпляры того места, где вы вызвали конструктор, и добавить только что добавленное дополнительное поле. @JonathanK. - person void; 05.05.2020
comment
Я пошел вперед и сделал все это, все еще была та же проблема. Посмотрев немного ближе к ошибкам, кажется, что я пытался вызвать конструктор с переменной, которую я даже не инициализировал. Удаление этой строки кода, похоже, устранило проблему. prnt.sc/sb5xvw Большое спасибо за вашу поддержку! - person Jonathan K.; 05.05.2020
comment
Рад, что помог. Даже после добавления поля в конструктор. - person void; 05.05.2020