【问题标题】:I am getting The method '[]' was called on null error in my app in streambuilder [Flutter]我在streambuilder [Flutter]中的应用程序中调用了方法'[]'出现空错误
【发布时间】:2020-12-18 06:24:21
【问题描述】:

编辑:- 实际上我通过将 !snapshot.data.documents.isEmpty 更改为 snapshot.data.data() != null 解决了这个问题 我发现当我尝试使用新文档将我的项目迁移到 FlutterFire 时,有些东西没有显示错误,但它们也不起作用。但在阅读文档后,我能够解决所有问题。

════════小部件库捕获的异常═════════════════════════════════════ ═ 在构建 StreamBuilder(dirty, state: _StreamBuilderBaseState#8fcb4) 时引发了以下 NoSuchMethodError: 在 null 上调用了方法“[]”。 接收方:空 尝试调用:

它在此文件的调试控制台中显示错误,它曾经可以工作,我没有更改任何内容,但它在 streambuilder 中显示 nosuchmethoderror

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:skype_clone/models/call.dart';
import 'package:skype_clone/provider/user_provider.dart';
import 'package:skype_clone/resources/call_methods.dart';
import 'package:skype_clone/screens/callscreens/pickup/pickup_screen.dart';

class PickupLayout extends StatelessWidget {
  final Widget scaffold;
  final CallMethods callMethods = CallMethods();

  PickupLayout({
    @required this.scaffold,
  });

  @override
  Widget build(BuildContext context) {
    final UserProvider userProvider = Provider.of<UserProvider>(context);

    return (userProvider != null && userProvider.getUser != null)
        ? StreamBuilder<DocumentSnapshot>(
            stream: callMethods.callStream(uid: userProvider.getUser.uid),
            builder: (context, snapshot) {
              if (snapshot.hasData && snapshot.data.data != null) {
                Call call = Call.fromMap(snapshot.data.data());

                if (!call.hasDialled) {
                  return PickupScreen(call: call);
                }
              }
              return scaffold;
            },
          )
        : Scaffold(
            body: Center(
              child: CircularProgressIndicator(),
            ),
          );
  }
}

【问题讨论】:

    标签: flutter


    【解决方案1】:

    试试这个代码:

    import 'package:cloud_firestore/cloud_firestore.dart';
    import 'package:flutter/material.dart';
    import 'package:provider/provider.dart';
    import 'package:skype_clone/models/call.dart';
    import 'package:skype_clone/provider/user_provider.dart';
    import 'package:skype_clone/resources/call_methods.dart';
    import 'package:skype_clone/screens/callscreens/pickup/pickup_screen.dart';
    
    class PickupLayout extends StatelessWidget {
      final Widget scaffold;
      final CallMethods callMethods = CallMethods();
    
      PickupLayout({
        @required this.scaffold,
      });
    
      @override
      Widget build(BuildContext context) {
        final UserProvider userProvider = Provider.of<UserProvider>(context);
    
        return (userProvider != null && userProvider.getUser != null)
            ? StreamBuilder<DocumentSnapshot>(
                stream: callMethods.callStream(uid: userProvider.getUser.uid),
                builder: (context, snapshot) {
                  if (snapshot.hasData && !snapshot.data.documents.isEmpty) {
                    Call call = Call.fromMap(snapshot.data.data());
    
                    if (!call.hasDialled) {
                      return PickupScreen(call: call);
                    }
                  }
                  return scaffold;
                },
              )
            : Scaffold(
                body: Center(
                  child: CircularProgressIndicator(),
                ),
              );
      }
    }
    

    【讨论】:

      【解决方案2】:

      实际上我通过将 !snapshot.data.documents.isEmpty 更改为 snapshot.data.data() != null 解决了这个问题 我发现当我尝试使用新文档将我的项目迁移到 FlutterFire 时,有些事情没有显示错误,但它们也没有工作。但是在阅读文档后,我能够解决所有问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-15
        • 2021-06-30
        • 1970-01-01
        • 1970-01-01
        • 2018-10-22
        • 1970-01-01
        • 2021-05-07
        • 1970-01-01
        相关资源
        最近更新 更多