【问题标题】:how to migrate snapshot.data.data(); to null safety如何迁移 snapshot.data.data();零安全
【发布时间】:2021-11-13 12:41:28
【问题描述】:

这是可以帮助我如何将其更改为空安全的代码,我在 .data() 中遇到错误。我将我的项目更改为 null-safety,然后我遇到了这个问题

这是错误

方法'data'不能被无条件调用,因为接收者可以是'null'。 尝试使调用有条件(使用'?.')或向目标添加空检查('!')。

Map<String, dynamic>? documentData = snapshot.data.data();

class HomeSlider extends StatefulWidget {
  final String? doc_id;
  HomeSlider({this.doc_id});
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<HomeSlider> {
  FirebaseServices _firebaseServices = FirebaseServices();
  int activeIndex = 1;

  @override
  Widget build(BuildContext context) {
    super.build(context);
    return Container(
        // height: 200,
        child: FutureBuilder(
            future: _firebaseServices.sliderRef
                .doc(widget.doc_id == null ? "Slider" : widget.doc_id)
                .get(),
            builder: (context, snapshot) {
              if (snapshot.hasError) {
                return Center(
                  child: Text("Error: ${snapshot.error}"),
                );
              }

              if (snapshot.connectionState == ConnectionState.done) {

                     // the error is here in data()
                // Firebase Document Data Map
                Map<String, dynamic> documentData = snapshot.data.data();

                List? imageList = documentData['images'];
                List? suid = documentData['suid'];

                return SliderBody(
                  imageList: imageList,
                  suid: suid,
                );
              }
              return Center(
                child: CircularProgressIndicator(),
              );
            }));
  }}

【问题讨论】:

  • 试试 snapshot.data!.data()
  • 不。没用。你有什么别的想法吗?
  • 您能否提供更多代码,以便我们了解错误来自何处,例如 data() 是什么以及您要实现什么。
  • 我已经添加了整个代码
  • 当你做 snapshot.data!.data() 时,你还有同样的 null 安全错误吗?

标签: flutter dart-null-safety


【解决方案1】:

你应该去

Map<String, dynamic>? documentData = snapshot!.data.data();

【讨论】:

  • 没有。那是行不通的。我还是有这个问题
  • 快照怎么样!.data!.data();
  • 不,仍然面临同样的错误
  • 我也加了整个代码,你可以看看
  • 你能不能试一次 final data = snapshot.data; Map documentData = data.data();
【解决方案2】:

问题出在 builder: (context, snapshot) { 添加AsyncSnapshot 后,终于像这样了。 builder: (context, AsyncSnapshot snapshot) { 并在 .data() 之前添加 !

class HomeSlider extends StatefulWidget {
  final String? doc_id;
  HomeSlider({this.doc_id});
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<HomeSlider> {
  FirebaseServices _firebaseServices = FirebaseServices();
  int activeIndex = 1;

  @override
  Widget build(BuildContext context) {
    super.build(context);
    return Container(
        // height: 200,
        child: FutureBuilder(
            future: _firebaseServices.sliderRef
                .doc(widget.doc_id == null ? "Slider" : widget.doc_id)
                .get(),
            builder: (context,AsyncSnapshot snapshot) {
              if (snapshot.hasError) {
                return Center(
                  child: Text("Error: ${snapshot.error}"),
                );
              }

              if (snapshot.connectionState == ConnectionState.done) {

                     // the error is here in data()
                // Firebase Document Data Map
                Map<String, dynamic> documentData = snapshot.data!.data();

                List? imageList = documentData['images'];
                List? suid = documentData['suid'];

                return SliderBody(
                  imageList: imageList,
                  suid: suid,
                );
              }
              return Center(
                child: CircularProgressIndicator(),
              );
            }));
  }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 2021-04-17
    • 2021-12-10
    • 1970-01-01
    • 2022-01-23
    • 2013-05-28
    • 1970-01-01
    • 2020-01-19
    相关资源
    最近更新 更多