Кнопка `Finish` Flutter с помощью reset() и pushNamed() приводит к ошибке «Параллельная модификация во время итерации».JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Кнопка `Finish` Flutter с помощью reset() и pushNamed() приводит к ошибке «Параллельная модификация во время итерации».

Сообщение Anonymous »

Введение
Я работаю над Flutter и Dart.

В приложении у меня есть экран, на котором отображается результат сканирования счета,

Неважно, что там за контент,

потому что вопрос к нему не относится.

В этом экране я добавил кнопку с названием «Готово»< /code>,

который должен занять пользователя на главный экран.
На самом деле эта кнопка переводит пользователя на главный экран, как и ожидалось,

но затем, пытаясь при сканировании другого счета возникает ошибка.

например, первое сканирование завершается успешно, но возвращается на главную

кнопка «Готово», вероятно, вызывает ошибку ,

поэтому следующая попытка сканирования не удалось.

На самом деле я попробовал два подхода, первый из которых работает хорошо,

но второй сталкивается с ошибкой.
соответствующий фрагмент кода
Внимание:
Кнопка (и код ее реализации

состоит из _showExportOptions),

не имеет отношения к вопросу.
Внимание:

Необходимо раскомментировать подход, который вы хотите протестировать.

Код: Выделить всё

 @override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.start, // Align all buttons to the start
children: [
// 'Share' Button
InkWell(
onTap: () => _showExportOptions(context, widget.vendor),
child: _buildIconButton(Icons.share, 'Share', color: Colors.white),
),
SizedBox(width: 16), // Space between buttons

// 'Finish' Button
InkWell(
onTap: () async {
/*
// The first approch:  you see 3 `Navigator lines`
// because for my app this takes you to `HomePage`.
Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pop();
Provider.of(context, listen: false).reset();
*/

/*
// The second approach
Navigator.of(context).pushNamed(HomeScreen.routename, arguments: 1);
Provider.of(context, listen: false).reset();
*/
},

child: _buildIconButton(Icons.check, 'Finish', color: Colors.white),
),
],
);
}

Widget _buildIconButton(IconData icon, String label, {Color? color}) {
return Column(
children: [
Icon(icon, color: color),
Text(label, style: TextStyle(color: color)),
],
);
}

Проблема
Ожидается:
Кнопка для возврата на главный экран.

На самом деле:

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

Код: Выделить всё

Navigator.of(context).pop();
Navigator.of(context).pop();
Navigator.of(context).pop();
Provider.of(context, listen: false).reset();
Однако при таком подходе возникает ошибка:

Код: Выделить всё

Provider.of(context, listen: false).reset();
Navigator.of(context).pushNamed(HomeScreen.routename, arguments: 1);

Сообщение об ошибках

Код: Выделить всё

@pragma("vm:external-name", "Error_throwWithStackTrace")
Concurrent modification during iteration: Instance(length:36) of '_GrowableList'.
Иногда вместо сообщения об ошибке я вижу:

"Ваш счет не соответствует".
Внимание:

Я также пытался разместить Провайдера после Навигатора,

но это не решает проблему.< /p>
Более того, я также пытался использовать Future задержка в 100 миллисекунд,

но это тоже провал.

Подробнее здесь: https://stackoverflow.com/questions/792 ... rrent-modi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»