在Flutter中避免繁琐的Dart操作导致UI停顿

时间:2018-08-06 05:06:39

标签: android ios dart flutter

我有一个正在开发的Flutter应用,其中包括日历。
当更新日历上的每一天时,需要进行一些处理以计算出要显示的内容。

一切正常,直到数据量更高。
现在,当每天更新时,更新功能将阻止UI。

我尝试进行更新,并在更新时显示进度动画。

尽管我如果在异步函数中运行代码,然后使用处理后的数据更新状态,这将阻止此阻塞操作。
我正在从“我的日子”显示的initState函数(有状态的小部件)中调用update函数。
A还研究了如何使用该线程库;
https://pub.dartlang.org/packages/threading
但它与Flutter的当前Beta分支不兼容。

我知道有一个IO线程,我认为这是处理此操作的正确位置,但是我看不到如何在其上运行Dart代码。

在不阻塞UI的情况下运行大量操作的正确方法是什么?

这是我为日间展示小部件尝试过的代码示例;

class DayDisplay extends StatefulWidget{
  DayDisplay(this.date, {Key key}) : super(key: key);
  DateTime date;
  @override
  State<StatefulWidget> createState() => new _DayState();
}

class _DayState extends State<DayDisplay>{

  @override
  void initState(){
    loading = true;
    new Future(updateData);//.then(()=>updateUI());
    super.initState();
  }

  void updateUI(){
    if (mounted){
      setState(() {});
    }
  }


  void updateData() async{
    ///Do heavy processing in here to populate data
    setState(() => loading = false);
  }

  @override
  Widget build(BuildContext context) {
    return /*{Generate widget tree here}*/;
  }
}

0 个答案:

没有答案