[英]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.