dart有状态小部件将数据传递给状态错误:小部件为null

轻子字节

我想从Firebase存储下载图像并缓存它们。但是,当我将路径从有状态小部件传递到状态时,我遇到了一个问题。

class FirebaseCachedImage extends StatefulWidget{
  final String mPath;

  FirebaseCachedImage({ Key key, this.mPath }) : super(key: key);

  @override
  State<StatefulWidget> createState() => _FirebaseCachedImage();
}

class _FirebaseCachedImage extends State<FirebaseCachedImage> {
  final FirebaseStorage storage = FirebaseStorage(app: Firestore.instance.app, storageBucket: 'gs://fluttertest-b7c52.appspot.com/');
  Uint8List imageBytes;
  String errorMsg;

  _FirebaseCachedImage() {
    String path = widget.mPath;
    storage.ref().child(path).getData(10000000).then((data) =>
        setState(() {
          imageBytes = data;
        })
    ).catchError((e) =>
        setState(() {
          errorMsg = e.error;
        })
    );
  }

  @override
  Widget build(BuildContext context) {
    var img = imageBytes != null ? Image.memory(imageBytes, fit: BoxFit.cover,) : Text(errorMsg != null ? errorMsg : "Loading...");

    return new Container(child: img);
  }
}

问题是这一行:

String path = widget.mPath;

它抛出一个错误:

The following NoSuchMethodError was thrown building MyGridTile:
I/flutter (11523): The getter 'mPath' was called on null.
I/flutter (11523): Receiver: null
I/flutter (11523): Tried calling: mPath
I/flutter (11523): 
I/flutter (11523): When the exception was thrown, this was the stack:
I/flutter (11523): #0      Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
I/flutter (11523): #1      new _FirebaseCachedImage (package:pre_alpha_release/firebase_cached_image.dart:21:26)
I/flutter (11523): #2      FirebaseCachedImage.createState (package:pre_alpha_release/firebase_cached_image.dart:12:42)
I/flutter (11523): #3      new StatefulElement (package:flutter/src/widgets/framework.dart:3746:23)
I/flutter (11523)
[....]

有任何想法吗?

地狱战士

您无法访问State构造函数上的窗口小部件,因为该元素尚未关联,请将其移动到initState状态内的方法中:

          @override
          void initState() {
            super.initState();
            String path = widget.mPath;
            storage.ref().child(path).getData(10000000).then((data) =>
                setState(() {
                  imageBytes = data;
                })
            ).catchError((e) =>
                setState(() {
                  errorMsg = e.error;
                })
            );
          }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将数据传递给有状态的小部件

Flutter/Dart:将参数传递给有状态小部件?

如何将数据传递给有状态的小部件

将列表索引数据传递给有状态小部件以动态加载 PDF 文档

将变量从有状态小部件传递给状态

有没有更好的方法可以在没有状态的继承小部件的情况下将数据传递给孩子?

处理将数据传递给小部件以缩短 Flutter / dart 中复杂布局的最佳方法?

在Flutter中,如何将数据传递到无状态小部件中?

将参数传递给Flutter中的无状态小部件

颤动将对象传递给有状态的小部件

如何跨有状态小部件传递数据?

Flutter:从两个有状态小部件传递数据

如何将List _data从main()传递给有状态的小部件(LIstView)?

颤抖如何将大型有状态小部件重构为较小的小部件

如何将数据参数抛出列表平铺到 DART 中的有状态小部件?

如何将数据传递给另一个小部件内的小部件

从有状态小部件更新无状态小部件

当我的小部件使用字符串ID进行引用时,如何将参数传递给有状态的小部件?

将选定的 DropDown 值从有状态小部件返回到 MainPage 有状态小部件

从无状态小部件调用到有状态小部件时,变量返回null吗?

将数据传递到CKEditor中的小部件

读取有状态小部件的状态

无法将onTap字段传递给无状态窗口小部件

在返回没有状态小部件的函数的函数中,将状态设置为变量的值

Flutter 通过无状态小部件向上传递数据

如何访问从 MaterialPageRoute 传递的有状态小部件中的对象

如何从有状态的小部件类传递变量?-扑

更新子传递到有状态小部件

从Flutter中的有状态小部件返回数据