#android #flutter
#Android #флаттер
Вопрос:
сценарий: есть приложение в flutter с жестко запрограммированным списком из 20 карт, после выпуска сборки этого на моих устройствах со скоростью 120 кадров в секунду все еще кажется, что 60 кадров в секунду, как это исправить, в то время как родной аналог Android имеет плавный рендеринг со скоростью 120 кадров в секунду.
попробовал приведенный выше сценарий, будет ли виджет на основе прокрутки как на основе конструктора, так и на обычных.
Является ли недостатком flutter то, что он не отображается со скоростью 120 кадров в секунду.
Ответ №1:
На телефонах Android с дисплеем 120 Гц по умолчанию выбран неправильный режим отображения (например, 60 Гц вместо 120 Гц). Это можно легко исправить, тогда производительность на таких телефонах, как Oneplus 8T или Galaxy S20 , отличная.
- Импорт
flutter_displaymode
библиотеки:
flutter_displaymode: ^0.3.0-nullsafety.0
- Добавьте это в свой корневой виджет (с отслеживанием состояния):
class _YourAppState extends State<YourApp> {
@override
void initState() {
setOptimalDisplayMode();
super.initState();
}
Future<void> setOptimalDisplayMode() async {
final List<DisplayMode> supported = await FlutterDisplayMode.supported;
final DisplayMode active = await FlutterDisplayMode.active;
final List<DisplayMode> sameResolution = supported.where(
(DisplayMode m) => m.width == active.width
amp;amp; m.height == active.height).toList()..sort(
(DisplayMode a, DisplayMode b) =>
b.refreshRate.compareTo(a.refreshRate));
final DisplayMode mostOptimalMode = sameResolution.isNotEmpty
? sameResolution.first
: active;
/// This setting is per session.
/// Please ensure this was placed with `initState` of your root widget.
await FlutterDisplayMode.setPreferredMode(mostOptimalMode);
}
}
Обратите внимание, что сейчас нет iPhone с частотой 120 Гц, поэтому нет необходимости их запускать.
Комментарии:
1. Теперь есть iphone 13 pro с частотой обновления 120 Гц. Интересно, будет ли кто-нибудь тестировать этот случай 🙂
2. У меня его нет, извините.
3. Этот пакет не работает на iphone13 pro
Ответ №2:
Вы должны профилировать свои показатели производительности. проверьте это https://flutter.dev/docs/perf/rendering/ui-performance
Комментарии:
1. Пробовал это. Даже пробовал просто отображать длинный текст по-прежнему одинаково.
2. для некоторых устройств Android требуется установить частоту обновления экрана, ознакомьтесь с этими комментариями github.com/flutter/flutter/issues/35162#issuecomment-564770280
3. и это github.com/flutter/flutter/issues/35162#issuecomment-604761374
Ответ №3:
Пожалуйста, попробуйте это, вы можете использовать медиа-запрос для определения размера вашего виджета.
MediaQuery.of(context).size
Комментарии:
1. какое это имеет отношение к 120 кадрам в секунду?
2. вы можете настроить размер своей карты
3. рассмотрите возможность использования ListView (дочерние элементы: список<Виджет>) вместо ListView.separated(itemBuilder: )
4. @RohitSoni, вы знаете, что можете удалить свой ответ, если понимаете, что он не очень полезен. (вы также получите обратно свои очки)