背景
在使用Provider的时候,可以用MultiProvider来注册。
动机
小部件往往会很快嵌套。不难看到:
MyWidget(
child: AnotherWidget(
child: Again(
child: AndAgain(
child: Leaf(),
)
)
)
)
那不是很理想。
那里有nested提出解决方案的地方。使用nested,可以将之前的树展平为:
Nested(
children: [
MyWidget(),
AnotherWidget(),
Again(),
AndAgain(),
],
child: Leaf(),
),
这更具可读性!
用法
Nested依赖于一种新的widget:SingleChildWidget,它有两个具体实现:
这些是原始的SingleChildWidget变体。Stateless StatefulWidget
小部件和它的单子变体之间的区别在于它们有一个build采用额外参数的自定义方法。
因此,StatelessWidget将是:
class MyWidget extends StatelessWidget {
MyWidget({Key key, this.child}): super(key: key);
final Widget child;
@override
Widget build(BuildContext context) {
return SomethingWidget(child: child);
}
}
而SingleChildStatelessWidget将是:
class MyWidget extends SingleChildStatelessWidget {
MyWidget({Key key, Widget child}): super(key: key, child: child);
@override
Widget buildWithChild(BuildContext context, Widget child) {
return SomethingWidget(child: child);
}
}
这允许我们的MyWidget用于:
MyWidget(
child: AnotherWidget(),
)
并像这样放置在[Nested]的children 中:
Nested(
children: [
MyWidget(),
...
],
child: AnotherWidget(),
)