android - dart 状态小部件将数据传递到状态错误 : widget is null

标签 android ios flutter

我想从 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;
                })
            );
          }

关于android - dart 状态小部件将数据传递到状态错误 : widget is null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53127322/

相关文章:

嵌入特殊字符的 url 出现 java.lang.IllegalArgumentException

android - 在 Android Studio 中重命名 apk

jquery - iOS(Safari 和 Chrome)div 周围的黑色边框

firebase - 无法从Firebase读取List,始终在snapshot.data上返回null

android - REORDER_TO_FRONT 令人费解的行为

android - 未配置 Google 日历 API 访问权限

ios - 为什么滚动 UITableView 比滚动 UIScrollView 响应更快?

ios - xcodebuild 不会编译项目,除非它至少使用 Xcode 打开一次,用于 cocoapods 集成项目

flutter - 如何在 flutter webview 中打开应用程序链接?

flutter - 为什么这个 Flutter Cubit 在省略关键字 'required' 时会抛出错误?