首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在空安全之后,PreferredSize小部件还有什么用?

在空安全之后,PreferredSize小部件还有什么用?
EN

Stack Overflow用户
提问于 2021-05-29 19:18:28
回答 1查看 420关注 0票数 0

在null-safety之前,我可以这样做:

代码语言:javascript
复制
class FooBar extends PreferredSize {
  final String data;
  FooBar(this.data);

  @override
  Size get preferredSize => Size.fromHeight(100);

  @override
  Widget build(BuildContext context) {
    return DashingText(data); // My own implementation. 
  }
}

并像这样使用它:

代码语言:javascript
复制
Scaffold(
  appBar: FooBar('My App bar'),
)

但是在空安全的情况下,我得到了一个错误,我需要向超类提供child。如果我必须为超类提供一个child,那么覆盖超类的build方法有什么好处呢?在空安全性到来之后,PreferredSize不是一个过时的类吗?

EN

回答 1

Stack Overflow用户

发布于 2021-05-29 20:43:28

PreferredSize小部件的构造函数需要两个参数,分别是Widget childSize preferredSize,方法是创建一个类来extends这个小部件,您需要遵守它的构造函数。在its documentation中,PreferredSize是这样描述的:

具有首选大小的小工具。

此小部件不会对其子部件施加任何约束,也不会以任何方式影响其子部件的布局。它只是通告一个可供父级使用的首选大小。

像Scaffold这样的父母使用PreferredSizeWidget来要求他们的孩子实现该接口。要为任意小部件提供首选大小,以便可以在该类型的子属性中使用它,可以使用小部件PreferredSize。

像AppBar这样的小部件实现了一个PreferredSizeWidget,因此对于它们来说这个PreferredSize小部件是不必要的。

如上所述,您的实现应该看起来更像是一个实现PreferredSizeWidgetStatelessWidget,其实现方式与为AppBar描述的方式相同

代码语言:javascript
复制
class MyWidget extends StatelessWidget implements PreferredSizeWidget {
  @override
  Widget build(BuildContext context) {
    return Text('Hello, World!');
  }
  
  @override
  Size get preferredSize => Size.fromHeight(100);
}

编辑:使用PreferredSize的示例

代码语言:javascript
复制
class MyStatelessWidget extends StatelessWidget {
  const MyStatelessWidget({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: PreferredSize(
        preferredSize: const Size.fromHeight(80.0),
        child: Container(
          decoration: const BoxDecoration(
            gradient: LinearGradient(
              colors: <Color>[Colors.blue, Colors.pink],
            ),
          ),
          child: const AppBarContent(),
        ),
      ),
      body: const Center(
        child: Text('Content'),
      ),
    );
  }
}

基于颤振源的AppBar实现

代码语言:javascript
复制
class AppBar extends StatefulWidget implements PreferredSizeWidget {
  // ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67750729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档