不断收到错误"Null check operator used on a null value"。我已经检查了 100 次我的代码



保持获取"对空值使用的空校验运算符";错误实际上,我正试图使用提供者从数据库中获取值,并在我的应用程序中使用它们但我坚持了下来,我用每一种方式检查了我的代码,但我仍然得到这个错误

:lib\providers\user_provider.dart

import 'package:flutter/widgets.dart';
import 'package:test_app/models/user.dart';
import 'package:test_app/resources/auth_methods.dart';
class UserProvider with ChangeNotifier {
User? _user;
final AuthMethods _authMethods = AuthMethods();
User get getUser => _user!;
Future<void> refreshUser() async {
User user = await _authMethods.getUserDetails();
_user = user;
notifyListeners();
}
}

lib\pages\home.dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_app/providers/user_provider.dart';
import 'package:test_app/models/user.dart' as model;
// import 'dart:html';
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
State<Home> createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
void initState() {
super.initState();
addData();
}
addData() async {
UserProvider _userProvider =
Provider.of<UserProvider>(context, listen: false);
await _userProvider.refreshUser();
}
@override
Widget build(BuildContext context) {
model.User user = Provider.of<UserProvider>(context).getUser;
return Scaffold(
body: Center(
child: Text("this is homepage"),
),
);
}
}

调试片段

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _CastError was thrown building Home(dirty, dependencies:
[_InheritedProviderScope<UserProvider?>], state: _HomeState#17895):
Null check operator used on a null value
The relevant error-causing widget was:
Home Home:file:///C:/Users/abc/Desktop/flutter/test_app/lib/main.dart:53:34
When the exception was thrown, this was the stack:
#0      UserProvider.getUser (package:test_app/providers/user_provider.dart:9:28)
#1      _HomeState.build (package:test_app/pages/home.dart:36:59)
#2      StatefulElement.build (package:flutter/src/widgets/framework.dart:4870:27)
#3      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4754:15)
#4      StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#5      Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#6      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4735:5)
#7      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4919:11)
#8      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4729:5)
#9      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3790:14)
#10     Element.updateChild (package:flutter/src/widgets/framework.dart:3524:20)
#11     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4780:16)
#12     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4928:11)
#13     Element.rebuild (package:flutter/src/widgets/framework.dart:4477:5)
#14     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2659:19)
#15     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:882:21)
#16     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:363:5)
#17     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1144:15)
#18     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1081:9)
#19     SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:862:7)
(elided 11 frames from class _RawReceivePortImpl, class _Timer, dart:async, and dart:async-patch)

我知道到底是什么问题让我手足无措我一生都在使用python

refreshUser是一个future,它设置了_user,但由于您正在调用getUser立即构建方法,该方法基本上以非null值的形式返回_user,因此会引发错误。

试试这个:

class UserProvider with ChangeNotifier {
User? _user;
final AuthMethods _authMethods = AuthMethods();
User? get getUser => _user;
Future<void> refreshUser() async {
User user = await _authMethods.getUserDetails();
_user = user;
notifyListeners();
}
}

和你的_HomeState:

class _HomeState extends State<Home> {
@override
void initState() {
super.initState();
addData();
}
addData() async {
UserProvider _userProvider =
Provider.of<UserProvider>(context, listen: false);
await _userProvider.refreshUser();
}
@override
Widget build(BuildContext context) {
model.User? user = Provider.of<UserProvider>(context).getUser;
return Scaffold(
body: Center(
child: Text("this is homepage"),
),
);
}
}

在User_Provider.art中,而不是做:

User get getUser => _user!;

这样做:

User? get getUser => _user;

相关内容

最新更新