Flutter — совершенно новый язык для кросс-платформенной разработки.Мне также повезло использовать Flutter для полной разработки в реальной разработке проекта.В этом процессе разработки это также пошаговый эксперимент, и я также столкнулся с различными ямами. Я проверил информацию в Интернете через различные Google, stackoverflow, официальный сайт Flutter и т. д. Некоторые проблемы были решены, но некоторые проблемы не могли быть решены вовремя, поэтому я медленно пытался найти некоторые решения, поэтому я организую их здесь и поделюсь их с вами. , узнать и обсудить со всеми.
1. Ожидание другой команды флаттера для снятия блокировки запуска...
описание проблемы
При использовании пакетов Flutter в проекте или при выполнении сборки flutter из командной строки появится: Ожидание другой команды flutter для снятия блокировки запуска...
решение:
Найдите файл блокировки в \bin\cache и удалите его.Если он по-прежнему не работает, перезапустите IDE и повторите попытку.
2. Вызовите setState или markNeedsBuild, чтобы сообщить об ошибке.
описание проблемы
Невозможно использовать контекст или setState непосредственно на странице initState, build или page return.
Решение
использовать
//方法一
WidgetsBinding.instance.addPostFrameCallback((_){
//跳转页面
});
//方法二
Future.delayed(Duration.zero).then((e) {
....
});
3. Ошибка сохранения состояния PageView
описание проблемы
Build functions must never return null. To return an empty space that causes the building widget to fill available room, return "new Container()". To return an empty space that takes as little room as possible, return "new Container(width: 0.0, height: 0.0)"
Решение
Вы должны добавить super.build в метод сборки
@override
Widget build(BuildContext context) {
super.build(context); //保存状态必须加上
[...]
}
4. Проблемы с менеджером событий
post : 发送消息
on : 监听消息
destroy : 销毁
описание проблемы
Неправильное использование destory делает все приложение неспособным отслеживать сообщения.
Решение
Dispose в BaseWidget не может уничтожить EventManager. EventManager — это синглтон, и базовый класс все это отменяет.
5. IOS вызывает событие щелчка камеры/альбома для проникновения
описание проблемы
При вызове камеры или альбома для выбора изображения щелчок по области камеры и области выбора изображения будет реагировать на событие щелчка нижнего интерфейса флаттера.
Конкретное участие:GitHub.com/flutter/Appendix…
Решение
Текущее решение состоит в том, чтобы отображать всплывающее окно с маской при активации камеры и альбома и отменять всплывающее окно с маской, когда камера и камера убраны.
6. Официальные проблемы с использованием Webview_flutter
описание проблемы
В Android поле ввода имеет фокус, и если дважды щелкнуть по нему, оно вернется назад.
В IOS необходимо настроить свойство io.flutter.embedded_views_preview, что приведет к зависанию клавиатуры.
Решение
Для официального разрешения временно используйте сторонний плагин flutter_webview_plugin.
7. Проблемы с использованием плагина flutter_webview_plugin
описание проблемы
flutter_webview_plugin должен вызвать нативный веб-просмотр и добавить его на нативную главную страницу. Таким образом, веб-просмотр является самым верхним и не может отображать на нем вид флаттера.
Решение
Чтобы отобразить представления, такие как всплывающие окна, сначала определите, существует ли текущая страница веб-просмотра, и вызовите FlutterWebviewPlugin().show() при входе на страницу веб-просмотра, вызовите FlutterWebviewPlugin().hide() при выходе из просматриваемой веб-страницы;
8. Указанный маршрут не может закрыть указанную страницу
описание проблемы
Flutter вызывает Navigator.pop(context, result) при закрытии всплывающего окна и страницы. Нет возможности указать конкретный маршрут страницы или всплывающее окно. Например, есть страница 1, страница 2, страница 3 , страница 4 в стеке, и она закрыта на странице 4. Страница 2, нет возможности указать конкретный маршрут страницы или всплывающее окно в именованном маршруте
Решение
Измените исходный код, чтобы освободить основную историю, или постарайтесь избежать этой практики, требующей закрытия указанной страницы.
9. Нет отклика на событие при нажатии на область управления
описание проблемы
Событие щелчка элемента управления установлено правильно, но щелчок не реагирует
Решение
- Установите фон для элемента управления
- Установите свойство поведения
return GestureDetector(
behavior: HitTestBehavior.translucent,
child: Text("测试${index}"),
onTap: () {},
);
enum HitTestBehavior {
/// Targets that defer to their children receive events within their bounds
/// only if one of their children is hit by the hit test.
deferToChild, //只生效在child的区域比如文字
/// Opaque targets can be hit by hit tests, causing them to both receive
/// events within their bounds and prevent targets visually behind them from
/// also receiving events.
opaque,//GestureDetector的整个区域,不包括它下面的区域
/// Translucent targets both receive events within their bounds and permit
/// targets visually behind them to also receive events.
translucent,// GestureDetector的整个区域以及它下面的区域
}
10. Проблема с настройкой высоты Appbar/Tabbar/
описание проблемы
Appbar, Tabbar по умолчанию имеют фиксированную высоту, как изменить ее высоту
Решение
Используйте предпочтительный размер.
наконец
Если у вас возникнут проблемы во время использования, оставьте сообщение ниже, чтобы сообщить об этом.
учебные материалы
- Flutter Github
- Китайская сеть Flutter
- Flutter Packages
- Флаттер электронная книга
- Китайская сеть ресурсов сообщества Flutter