Поскольку PDO, похоже, не дает хорошего решения, вы можете также рассмотреть возможность использования DBAL, который в основном следует API PDO, но также добавляет некоторые полезные функции http://docs.doctrine-project.org/ project / doctrine-dbal / ru / latest / reference / data-retrieval-and-manipulation.html # list-of-parameters-conversion
$stmt = $conn->executeQuery('SELECT * FROM articles WHERE id IN (?)',
array(array(1, 2, 3, 4, 5, 6)),
array(\Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
);
Возможно, есть и другие пакеты там, которые не добавляют сложности и не скрывают взаимодействия с базой данных (как и большинство ORM), но в то же время облегчают небольшие типичные задачи.
Кажется, я понял, как решить мою проблему. Я видел ответ в этом посте: Flutter: setState () или markNeedsBuild () вызывается, когда дерево виджетов было заблокировано ... во время изменения ориентации
В этом посте OP сталкивался с тем же ошибка при переключении между портретным и ландшафтным режимами, когда ящик был открыт. Ответ в этом посте предложил вызвать Navigator.pop () (который закрывает Drawer) перед изменением режимов просмотра.
Поэтому я попробовал и закрыл свой Drawer, используя Navigator.pop (), перед использованием метода .jumpToPage PageController. Кажется, это работает, и позволяет мне перемещаться между страницами PageView, используя события onTap из Drawer, не выбрасывая «При завершении дерева виджета было выдано следующее утверждение: setState () или markNeedsBuild () вызывается, когда дерево виджетов было заблокировано «Исключение.
Я предполагаю, что это означает, что, пока ящик открыт, дерево виджетов переводится в заблокированное состояние.
Надеюсь, это кому-то поможет, так как мне понадобилось время, чтобы понять.
@Blau
Иногда событие происходило за пределами созданных вами виджетов. например (1) Таймер, который увеличивает «Глобальный счетчик», этот счетчик будет отображаться на многих страницах / виджетах (2) Сообщение, отправленное с сервера сокетов, при получении этого сообщения / события пользователь может находиться где угодно (любые страницы / widgets), и вы не знаете, где 'setState' (или виджета фактически нет там, потому что пользователь не на этой странице)
Я построил 2 примера, которые демонстрируют, как использовать Redux для решить проблемы такого рода:
Пример 1: (использовать многопоточный таймер для установки виджета при запуске внешнего события)
https://github.com / lhcdims / statemanagement01
Пример 2: (Используйте Redux для обновления виджета при запуске внешнего события)
https://github.com/lhcdims/statemanagement02 [ 111]
Демонстрационный снимок экрана: