Проблема с флаттером 120 кадров в секунду

#android #flutter

#Android #флаттер

Вопрос:

сценарий: есть приложение в flutter с жестко запрограммированным списком из 20 карт, после выпуска сборки этого на моих устройствах со скоростью 120 кадров в секунду все еще кажется, что 60 кадров в секунду, как это исправить, в то время как родной аналог Android имеет плавный рендеринг со скоростью 120 кадров в секунду.

попробовал приведенный выше сценарий, будет ли виджет на основе прокрутки как на основе конструктора, так и на обычных.

Является ли недостатком flutter то, что он не отображается со скоростью 120 кадров в секунду.

Ответ №1:

На телефонах Android с дисплеем 120 Гц по умолчанию выбран неправильный режим отображения (например, 60 Гц вместо 120 Гц). Это можно легко исправить, тогда производительность на таких телефонах, как Oneplus 8T или Galaxy S20 , отличная.

  1. Импорт flutter_displaymode библиотеки:
 flutter_displaymode: ^0.3.0-nullsafety.0
  
  1. Добавьте это в свой корневой виджет (с отслеживанием состояния):
 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, вы знаете, что можете удалить свой ответ, если понимаете, что он не очень полезен. (вы также получите обратно свои очки)