Как увеличить счетчик и отключить кнопку во флаттере? - PullRequest
0 голосов
/ 24 января 2020

У меня есть кнопка, которую я хочу отключить после увеличения счетчика. Это метод, который я использую для увеличения моего счетчика:

void incrementAdCounter() async {
    setState(() {
      adCounter++;
      if (adCounter == 2 || adCounter > 2) {
        isAdButtonDisabled = true;
      }
      setAdCounter();
      print(adCounter);
    });
  }

Внутри initState:

void initButtons() {
    isAdButtonDisabled = false;
    adCounter = 0
}

У меня есть кнопка, и я вызвал эти методы в onTap, если кнопки:

void getCounters() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  adCounter = prefs.getInt('adCounter');
  isAdButtonDisabled = prefs.getBool('isAdButtonDisabled');
}
setAdCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setInt('adCounter', adCounter);
    prefs.setBool('isAdButtonDisabled', isAdButtonDisabled);
  }

Когда я вызываю этот метод, он показывает мне следующую ошибку:

Unhandled Exception: NoSuchMethodError: The method '+' was called on null.
E/flutter (13166): Receiver: null

Ответы [ 3 ]

1 голос
/ 24 января 2020

Эта модификация вашего исходного кода будет делать именно то, что вы просите:

int adCounter = 0;

@override
Widget build(BuildContext context) {
  return Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text(adCounter.toString()),
        RaisedButton(
          onPressed: adCounter >= 2 ? null : incrementAdCounter,
          child: Text('Increment'),
        ),
      ],
    )
  );
}

void incrementAdCounter() {
  setState(() {
    adCounter++;
  });
}

Остальная часть вашего кода не нуждается в модификации, за исключением того факта, что вам не нужно сохранить в SharedPreferences, если ваша кнопка отключена. Вы можете просто проверить его по значению.

1 голос
/ 24 января 2020

Попробуйте,

void getCounters() async { 
  SharedPreferences prefs = await SharedPreferences.getInstance();
  adCounter = prefs.getInt('adCounter') ?? 0;
  isAdButtonDisabled = prefs.getBool('isAdButtonDisabled'); 
}
1 голос
/ 24 января 2020

int adCounter = 0; (инициализируйте значение первым, как хотите)

void incrementAdCounter() async {
    setState(() {
      adCounter++;
      if (adCounter == 2 || adCounter > 2) {
        isAdButtonDisabled = true;
      }
      setAdCounter();
      print(adCounter);
    });
  }
...