簡體   English   中英

null 小部件參數安全

[英]null safety on widget parameter

在 null-safety 之前,我可以通過小部件,如果檢查它是 null,將顯示其他小部件。 在空安全環境中,如果我沒有傳遞小部件imagenote ,有沒有辦法?

class Message extends StatelessWidget {
  const Message({
    Key key,
    this.image,
    this.title = "",
    this.subtitle = "",
    this.note,
    this.onTap
  }) : super(key: key);

  final Widget image;
  final String title;
  final String subtitle;
  final Widget note;
  final Function onTap

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onTap,
      child: Column(
        children:[
          image ?? Container(),
          if(note != null) note
        ]
      )
    );
  }
};

您可以將圖像和注釋聲明為可為空的類型。 如果您需要將任何字段設為必填,您可以將其標記為required

class Message extends StatelessWidget {
  const Message({
    Key? key,
    this.image,
    this.title = "",
    this.subtitle = "",
    this.note,
    required this.onTap,
  }) : super(key: key);

  final Widget? image;
  final String title;
  final String subtitle;
  final Widget? note;
  final VoidCallback onTap;

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: onTap,
      child: Column(
        children:[
          image ?? Container(),
          note ?? Container(),
        ]
      )
    );
  }
}
  • 使用? 如果孩子可以是null

     class FooWidget extends StatelessWidget { final Widget? child; // <-- Nullable, use '?' FooWidget({ this.child, }); //... }
  • 如果孩子不能是null ,則required使用。

     class FooWidget extends StatelessWidget { final Widget child; // <-- Non-nullable FooWidget({ required this.child, // <-- Use 'required' }); //... }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM