答案 0 :(得分:0)
我也是 Dart 新手,在 DartPad 上玩。
似乎在 Set (i.e. Int, String)
或
a List {'hello', 'world'}
之前放置类型 ['hello', 'world']
会使它像 "strict" 一样,使其类型安全. (ref:https://dart.dev/guides/language/type-system)
就像你做<String>['hello', 'world']
列表中只接受字符串,
并且如果您执行 <String>[1,2,3]
会抛出错误。
因此,在 <Widget>[Column(), Rows()]
中,如果您将非小部件类或对象放入集合中,它将抛出一个错误,就像您这样做一样<Widget>['hello', 'world']
。
在 DartPad https://dartpad.dev/215ba63265350c02dfbd586dfd30b8c3?null_safety=true 上试试下面的代码。请注意,它会抛出错误,因为我在第 3 行的 Widget 类型 Set 上放置了一个字符串。
import 'package:flutter/material.dart';
void main() {
print(<String>['Hello',' ', 'World']);
print(<Widget>[Column(), 'hello']); //error will throw since it will only accept <Widget>
print(<Widget>[Column(),Row()]);
}
此外,列表中的所有项目都是 Widgets 类,并且在那些 e.i. “height: 36.0”是widget的属性/方法,就像嵌套的Widget,Flutter里到处都是。
class MyButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
print('MyButton was tapped!');
},
child: Container( // Container is a widget, child is a GestureDetector props.
height: 36.0, //height is a Container props
padding: const EdgeInsets.all(8.0), // EdgeInsets also a widget
margin: const EdgeInsets.symmetric(horizontal: 8.0),
decoration: BoxDecoration( // BoxDecoration also a widget
borderRadius: BorderRadius.circular(5.0),
color: Colors.lightGreen[500],
),
child: Center(
child: Text('Engage'),
),
),
);
}
}