какая польза от `State <T extends StatefulWidget>` - PullRequest
0 голосов
/ 14 марта 2019

Я посмотрел на документы дартс для дженериков.

abstract class StringCache {
  String getByKey(String key);
  void setByKey(String key, String value);
}

abstract class ObjectCache {
  Object getByKey(String key);
  void setByKey(String key, Object value);
}

Вышеуказанные два заменены одним единственным универсальным типом T с кодом ниже

abstract class Cache<T> {
  T getByKey(String key);
  void setByKey(String key, T value);
}

Там, где ясно видно использование T.но не уверен, где класс состояния использует

class _CounterState extends State<Counter> {
  int _counter = 0;

  void _increment() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        RaisedButton(
          onPressed: _increment,
          child: Text('Increment'),
        ),
        Text('Count: $_counter'),
      ],
    );
  }
}

1 Ответ

1 голос
/ 14 марта 2019

T - это параметр общего типа, а extends StatefulWidget - ограничение для типов, которые могут быть установлены для T.

С

class _CounterState extends State<Counter> {

T имеет тип Counter (который должен быть StatefulWidget).

Передача Counter как тип позволяет использовать

widget.foo

в поле ссылки foo в Counter из _CounterState, и вы получите автозаполнение и проверку статического типа.

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