Я работаю над Flutter и Dart.
В приложении у меня есть экран, на котором отображается результат сканирования счета,
Неважно, что там за контент,
потому что вопрос к нему не относится.
В этом экране я добавил кнопку с названием «Готово»< /code>,
который должен занять пользователя на главный экран.
На самом деле эта кнопка переводит пользователя на главный экран, как и ожидалось,
но затем, пытаясь при сканировании другого счета возникает ошибка.
например, первое сканирование завершается успешно, но возвращается на главную
кнопка «Готово», вероятно, вызывает ошибку ,
поэтому следующая попытка сканирования не удалось.
На самом деле я попробовал два подхода, первый из которых работает хорошо,
но второй сталкивается с ошибкой.
соответствующий фрагмент кода
Внимание:
Код: Выделить всё
Shareсостоит из _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
Мобильная версия