簡體   English   中英

我在 streambuilder [Flutter] 中的應用程序中因空錯誤調用了方法“[]”

[英]I am getting The method '[]' was called on null error in my app in streambuilder [Flutter]

編輯:- 實際上,我通過將 !snapshot.data.documents.isEmpty 更改為 snapshot.data.data() != null 解決了這個問題,我發現當我嘗試使用新文檔將我的項目遷移到 FlutterFire 時,有些事情沒有t 顯示錯誤,但它們也不起作用。 但是在閱讀文檔后,我能夠解決所有問題。

========小部件庫捕獲的異常=================================== 如下NoSuchMethodError 被拋出構建 StreamBuilder(dirty, state: _StreamBuilderBaseState<DocumentSnapshot, AsyncSnapshot>#8fcb4): 方法 '[]' 在 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(),
            ),
          );
  }
}

試試這個代碼:

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(),
            ),
          );
  }
}

實際上,我通過將 !snapshot.data.documents.isEmpty 更改為 snapshot.data.data() != null 解決了這個問題,我發現當我嘗試使用新文檔將我的項目遷移到 FlutterFire 時,有些事情沒有顯示錯誤但他們也沒有工作。 但是在閱讀文檔后,我能夠解決所有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM