如何在初始化程序颤动中从小部件访问传递的值

Posted

技术标签:

【中文标题】如何在初始化程序颤动中从小部件访问传递的值【英文标题】:how to access passed value from widget in initializer flutter 【发布时间】:2021-12-25 08:12:24 【问题描述】:

我正在从另一个页面获取 imageUrl。我想使用“theimage”中的“imageUrl”,但我无法访问它。我正面临这个错误。

无法在初始化程序中访问实例成员“widget”。 尝试用不同的表达式替换对实例成员的引用

class ProductCard extends StatefulWidget 
  final String imageUrl;
  ProductCard(
      this.imageUrl,);

  @override
  State<ProductCard> createState() => _ProductCardState();


class _ProductCardState extends State<ProductCard> 

  // I can not access widget.imageUrl in here
    final theImage = Image.network("$widget.imageUrl", fit: BoxFit.cover);

    /// Did Change Dependencies
    @override
    void didChangeDependencies() 
      precacheImage(theImage.image, context);
      super.didChangeDependencies();
    
  @override
  Widget build(BuildContext context) 

    return Container(
            child:theImage;
            );
   

【问题讨论】:

【参考方案1】:

您正在使用命名构造函数ProductCard 使imageUrl 必需为空,或提供默认值。

 const ProductCard(
      required this.imageUrl,);

并使用initState 进行初始化。

  late final Image theImage;

    @override
  void initState() 
      theImage = Image.network("$widget.imageUrl", fit: BoxFit.cover);
    super.initState();
  

接下来从theImage 的末尾删除; 或使用,

  @override
  Widget build(BuildContext context) 
    return Container(child: theImage);
  

【讨论】:

以上是关于如何在初始化程序颤动中从小部件访问传递的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中将数据从一个小部件传递到另一个小部件?

如何从有状态的小部件类传递变量? - 颤动[重复]

在颤动中将数据从小部件发送到另一个小部件

如何在颤动中从父小部件访问所有孩子的状态?

如何在颤动的另一个有状态小部件中访问在一个有状态小部件中创建的对象

如何在颤动中将Json数据传递到多屏