Флаттер с низкой частотой кадров - PullRequest
0 голосов
/ 26 июня 2019

Я увидел линейное ухудшение пользовательского интерфейса с частотой кадров при запуске плагина анимации speed_dial. Проблема появляется, когда я добавляю функцию sharedpref здесь:

 @override
  Widget build(BuildContext context) {
   sharedpref_function();
    return Scaffold(

для прослушивания сохраненного значения, даже если sharedpref пуст, у меня это ухудшение.

Через 10 минут, не делая ничего прежде, я измеряю 1120мс / кадр, когда я вызываю _renderSpeedDial

Вот полный код:

  bool _dialVisible = true;
  Color _speedDial =  Colors.pink;

  sharedpref_function() async {     
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
    }
   );
  }

  _renderSpeedDial() {
    return SpeedDial(
      animatedIcon: AnimatedIcons.add_event,
      animatedIconTheme: IconThemeData(size: 22.0),
      backgroundColor: _speedDial,
      // child: Icon(Icons.add),
      /*  onOpen: () => print('OPENING DIAL'),
      onClose: () => print('DIAL CLOSED'),*/
      visible: _dialVisible,
      curve: Curves.bounceIn,
      children: [

        SpeedDialChild(
          child: Icon(Icons.fullscreen_exit, color: Colors.white),
          backgroundColor: Color(0xffa088df),
          onTap: () {
            setState(() {

            });
          },
          label: '1',
          labelStyle: TextStyle(fontWeight: FontWeight.w500,color: Colors.white),
          labelBackgroundColor:Color(0xffa088df),
        ),

      ],
    );
  }

  @override
  Widget build(BuildContext context) {
    sharedpref_function(); // here the sharedpref I use to listen saved value
    return Scaffold(
  body: Stack(
      children: <Widget>[
    Padding
      (
      padding: const EdgeInsets.only(right:10.0, bottom:10.0),
      child:
      _renderSpeedDial(),
    ),
      ],
)
);
  }
}

1 Ответ

2 голосов
/ 26 июня 2019

Ваш sharedpref_function () метод вызывается внутри вашего build метода. Это вообще не рекомендуется, потому что он будет вызываться в каждом кадре, который нужно перестроить, и ваш код, содержащий анимацию, будет вызываться со скоростью 60 кадров в секунду (для каждого кадра).

Переместите ваш метод внутрь initState или didChangeDependencies (есть еще больше методов, которые вызываются один или несколько раз, например didChangeDependencies ).

Когда вам нужно обновить значения, вы можете сделать это с помощью жеста onTap и все.

Кроме того, протестируйте свое приложение в --release (режим выпуска), чтобы по-настоящему проверить скорость своего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...