Android 如何优化此颤振代码以减少工作量?

Android 如何优化此颤振代码以减少工作量?,android,flutter,dart,refactoring,counter,Android,Flutter,Dart,Refactoring,Counter,我的应用程序做了太多的工作。如何优化此代码?我不知道如何改变它,但仍然得到同样的效果! 我需要每个变量都保存在手机上,这样我就可以随时回到那个状态 我试图将每天的分数保存在它自己的变量上,因为我不知道如何以不同的方式返回 正如你所看到的,我是个初学者 守则: _loadDay() async { SharedPreferences prefs = await SharedPreferences.getInstance(); setState(() { _day = (

我的应用程序做了太多的工作。如何优化此代码?我不知道如何改变它,但仍然得到同样的效果! 我需要每个变量都保存在手机上,这样我就可以随时回到那个状态

我试图将每天的分数保存在它自己的变量上,因为我不知道如何以不同的方式返回

正如你所看到的,我是个初学者

守则:

_loadDay() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      _day = (prefs.getInt('day') ?? 0);
      day = _day -1;
      _score=_counter[day];
    });
  }
  _loadCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      if(_day==1){
        _counter[day] = (prefs.getInt('counter1') ?? 0);
        _score=_counter[day];
      }
      if(_day==2){
        _counter[day] = (prefs.getInt('counter2') ?? 0);
        _score=_counter[day];
      }
      if(_day==3){
        _counter[day] = (prefs.getInt('counter3') ?? 0);
        _score=_counter[day];
      }
      if(_day==4){
        _counter[day] = (prefs.getInt('counter4') ?? 0);
        _score=_counter[day];
      }
      if(_day==5){
        _counter[day] = (prefs.getInt('counter5') ?? 0);
        _score=_counter[day];
      }
      if(_day==6){
        _counter[day] = (prefs.getInt('counter6') ?? 0);
        _score=_counter[day];
      }if(_day==7){
        _counter[day] = (prefs.getInt('counter7') ?? 0);
        _score=_counter[day];
      }
      if(_day==8){
        _counter[day] = (prefs.getInt('counter8') ?? 0);
        _score=_counter[day];
      }
      if(_day==9){
        _counter[day] = (prefs.getInt('counter9') ?? 0);
        _score=_counter[day];
      }
      if(_day==10){
        _counter[day] = (prefs.getInt('counter10') ?? 0);
        _score=_counter[day];
      }
      if(_day==11){
        _counter[day] = (prefs.getInt('counter11') ?? 0);
        _score=_counter[day];
      }
      if(_day==12){
        _counter[day] = (prefs.getInt('counter12') ?? 0);
        _score=_counter[day];
      }if(_day==13){
        _counter[day] = (prefs.getInt('counter13') ?? 0);
        _score=_counter[day];
      }
      if(_day==14){
        _counter[day] = (prefs.getInt('counter14') ?? 0);
        _score=_counter[day];
      }
      if(_day==15){
        _counter[day] = (prefs.getInt('counter15') ?? 0);
        _score=_counter[day];
      }
      if(_day==16){
        _counter[day] = (prefs.getInt('counter16') ?? 0);
        _score=_counter[day];
      }
      if(_day==17){
        _counter[day] = (prefs.getInt('counter17') ?? 0);
        _score=_counter[day];
      }
      if(_day==18){
        _counter[day] = (prefs.getInt('counter18') ?? 0);
        _score=_counter[day];
      }
      if(_day==19){
        _counter[day] = (prefs.getInt('counter19') ?? 0);
        _score=_counter[day];
      }
      if(_day==20){
        _counter[day] = (prefs.getInt('counter20') ?? 0);
        _score=_counter[day];
      }
      if(_day==21){
        _counter[day] = (prefs.getInt('counter21') ?? 0);
        _score=_counter[day];
      }
      if(_day==22){
        _counter[day] = (prefs.getInt('counter22') ?? 0);
        _score=_counter[day];
      }
      if(_day==23){
        _counter[day] = (prefs.getInt('counter23') ?? 0);
        _score=_counter[day];
      }
      if(_day==24){
        _counter[day] = (prefs.getInt('counter24') ?? 0);
        _score=_counter[day];
      }
      if(_day==25){
        _counter[day] = (prefs.getInt('counter25') ?? 0);
        _score=_counter[day];
      }
      if(_day==26){
        _counter[day] = (prefs.getInt('counter26') ?? 0);
        _score=_counter[day];
      }
      if(_day==27){
        _counter[day] = (prefs.getInt('counter27') ?? 0);
        _score=_counter[day];
      }
      if(_day==28){
        _counter[day] = (prefs.getInt('counter28') ?? 0);
        _score=_counter[day];
      }
      if(_day==29){
        _counter[day] = (prefs.getInt('counter29') ?? 0);
        _score=_counter[day];
      }
      if(_day==30){
        _counter[day] = (prefs.getInt('counter30') ?? 0);
        _score=_counter[day];
      }
    });
  }
//Incrementing counter after click
  _incrementCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      if(_day==1){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter1') ?? 0) + 1;
        prefs.setInt('counter1', _counter[day]);
        _score=_counter[day];
      }
      if(_day==2){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter2') ?? 0) + 1;
        prefs.setInt('counter2', _counter[day]);
        _score=_counter[day];
      }
      if(_day==3){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter3') ?? 0) + 1;
        prefs.setInt('counter3', _counter[day]);
        _score=_counter[day];
      }
      if(_day==4){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter4') ?? 0) + 1;
        prefs.setInt('counter4', _counter[day]);
        _score=_counter[day];
      }
      if(_day==5){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter5') ?? 0) + 1;
        prefs.setInt('counter5', _counter[day]);
        _score=_counter[day];
      }
      if(_day==6){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter6') ?? 0) + 1;
        prefs.setInt('counter6', _counter[day]);
        _score=_counter[day];
      }
      if(_day==7){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter7') ?? 0) + 1;
        prefs.setInt('counter7', _counter[day]);
        _score=_counter[day];
      }
      if(_day==8){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter8') ?? 0) + 1;
        prefs.setInt('counter8', _counter[day]);
        _score=_counter[day];
      }
      if(_day==9){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter9') ?? 0) + 1;
        prefs.setInt('counter9', _counter[day]);
        _score=_counter[day];
      }
      if(_day==10){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter10') ?? 0) + 1;
        prefs.setInt('counter10', _counter[day]);
        _score=_counter[day];
      }
      if(_day==11){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter11') ?? 0) + 1;
        prefs.setInt('counter11', _counter[day]);
        _score=_counter[day];
      }
      if(_day==12){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter12') ?? 0) + 1;
        prefs.setInt('counter12', _counter[day]);
        _score=_counter[day];
      }
      if(_day==13){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter13') ?? 0) + 1;
        prefs.setInt('counter13', _counter[day]);
        _score=_counter[day];
      }
      if(_day==14){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter14') ?? 0) + 1;
        prefs.setInt('counter14', _counter[day]);
        _score=_counter[day];
      }
      if(_day==15){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter15') ?? 0) + 1;
        prefs.setInt('counter15', _counter[day]);
        _score=_counter[day];
      }
      if(_day==16){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter16') ?? 0) + 1;
        prefs.setInt('counter16', _counter[day]);
        _score=_counter[day];
      }
      if(_day==17){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter17') ?? 0) + 1;
        prefs.setInt('counter17', _counter[day]);
        _score=_counter[day];
      }
      if(_day==18){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter18') ?? 0) + 1;
        prefs.setInt('counter18', _counter[day]);
        _score=_counter[day];
      }
      if(_day==19){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter19') ?? 0) + 1;
        prefs.setInt('counter19', _counter[day]);
        _score=_counter[day];
      }
      if(_day==20){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter20') ?? 0) + 1;
        prefs.setInt('counter20', _counter[day]);
        _score=_counter[day];
      }
      if(_day==21){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter21') ?? 0) + 1;
        prefs.setInt('counter21', _counter[day]);
        _score=_counter[day];
      }
      if(_day==22){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter22') ?? 0) + 1;
        prefs.setInt('counter22', _counter[day]);
        _score=_counter[day];
      }
      if(_day==23){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter23') ?? 0) + 1;
        prefs.setInt('counter23', _counter[day]);
        _score=_counter[day];
      }
      if(_day==24){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter24') ?? 0) + 1;
        prefs.setInt('counter24', _counter[day]);
        _score=_counter[day];
      }
      if(_day==25){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter25') ?? 0) + 1;
        prefs.setInt('counter25', _counter[day]);
        _score=_counter[day];
      }
      if(_day==26){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter26') ?? 0) + 1;
        prefs.setInt('counter26', _counter[day]);
        _score=_counter[day];
      }
      if(_day==27){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter27') ?? 0) + 1;
        prefs.setInt('counter27', _counter[day]);
        _score=_counter[day];
      }
      if(_day==28){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter28') ?? 0) + 1;
        prefs.setInt('counter28', _counter[day]);
        _score=_counter[day];
      }
      if(_day==29){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter29') ?? 0) + 1;
        prefs.setInt('counter29', _counter[day]);
        _score=_counter[day];
      }
      if(_day==30){
        _loadCounter();
        _counter[day] = (prefs.getInt('counter30') ?? 0) + 1;
        prefs.setInt('counter30', _counter[day]);
        _score=_counter[day];
      }
    });
  }

为了使代码更简洁,首先利用Dart提供的字符串插值

像这样

setState(() {
  if(day > 0 && day <=30) {
    _counter[day] = (prefs.getInt('counter$day') ?? 0);
    _score=_counter[day];
  }
});
在这里,我们要做的是利用
FutureBuilder
小部件。这将等待未来,当它等待未来完成时,它将显示一个
CircularProgressIndicator
,然后,当未来得到解决时,它将显示加载的小部件
YourWidgetHere

我们还
等待另一个函数中的SharedReference。此函数将等待实例,然后将其保存在变量中,以便您可以从函数中访问它(
\u loadDay
&
\u incrementCounter

从这些函数中,您可以调用
prefs.getInt
&
prefs.setInt


这将提高代码的速度。

我认为您可以优化
\u loadCounter
方法,如下所示:


_loadCounter()异步{
如果(_-day>0&&u-day<31){
final prefs=wait SharedPreferences.getInstance();
最终值=prefs.getInt('counter$_day')??0;
设置状态(){
_计数器[日]=数值;
_分数=价值;
});
}
}
您可以执行类似于
\u incrementCounter
的操作

我注意到的一件事是,你在
之间做+1和-1;这两个你都需要吗?如果不是,则可以使用相同的值。作为名称建议,我将使用
dayIndex
而不是
day


第二,从
SharedReferences
存储和检索值的速度不是很快。您可能需要研究如何使用
Hive
包。

循环,通过字符串插值创建pref名称,完成了吗?如果您有需要同行评审以改进的工作代码,您应该询问,这是专门为此目的创建的。@KenWhite好的,谢谢,我将在那里尝试!它不起作用。。它保存了正确的数量,但当我切换页面并返回主计数器时,它会显示“0”,直到我增加天数并将其减少到当天为止。。。而不是显示正确的号码…非常感谢!它对装载计数器部分有效!我觉得我自己用递增计数器试的时候有点搞砸了。。我必须输入日期变量,因为我在屏幕上显示日期。。如果我使用相同的变量,显示日将从0开始,我想。。。
...

FutureBuilder(
  future: () => _getSharedPrefInstance(),
  builder: (context, snapshot) {
    if(snapshot.hasData){
      return YourWidgetHere();
    } else {
      return CircularProgressIndicator();
    }
  },
);

...

Future<SharedPreferences> _getSharedPreferences() async {
  final instance = await SharedPreferences.getInstance();
  setState(() async {
    prefs= instance;
  });

  return instance;
}

...