Dart中的Object <type>语法是什么意思?

时间:2018-07-09 13:07:35

标签: dart flutter

在下面的代码示例中,来自flutter docs

class RandomWords extends StatefulWidget {
  @override
  createState() => RandomWordsState();
}

class RandomWordsState extends State<RandomWords> {
  @override
  Widget build(BuildContext context) {
    final wordPair = WordPair.random();
    return Text(wordPair.asPascalCase);
  }
}

State<RandomWords>语法到底是什么意思?

我了解您可以使用以下语法为集合中包含的对象(例如列表)指定类型-List <String>

但是我无法理解State<RandomWords>背后的动机。

此外,如何在RandomWordsState声明中引用RandomWords,又如何在RandomWords声明中引用RandomWordsState?那不是应该引起循环引用错误吗?

我来自动态类型的语言(例如python),这对我来说有点奇怪,有人可以将我指向正确的位置吗?

1 个答案:

答案 0 :(得分:2)

<RandomWords>是传递给State类的通用类型参数。

State类看起来像

abstract class State<T extends StatefulWidget> extends Diagnosticable {

RandomWords将被传递到T类型的参数,该参数具有一个约束,即T必须是StatefulWidget的子类。

State还有一个使用type参数的字段和getter

  T get widget => _widget;
  T _widget;

这将导致小部件类型的属性 它在其子类RandomWordsState

中提供了正确的自动补全和类型检查

假设你有

class RandomWords extends StatefulWidget {
  RandomWords({this.fixed});

  final WordPair fixed;

  @override
  createState() => RandomWordsState();
}

class RandomWordsState extends State<RandomWords> {
  @override
  Widget build(BuildContext context) {
    // vvvv here we can access `fixed` in a strongly typed manner
    final wordPair = widget.fixed ?? WordPair.random();
    return Text(wordPair.asPascalCase);
  }
}

另请参阅https://www.dartlang.org/guides/language/language-tour#generics