我在尝试删除 Flutter 应用中的用户帐户时遇到问题。我有一个确认对话框,询问用户是否确实要删除其帐户。但是,当用户通过单击对话框上的“取消”按钮取消删除过程时,我收到错误
Null check operator used on a null value
。我认为这里的上下文可能为空。
我知道以前曾有人问过此类问题,但从昨天开始我一直在努力解决这个错误。有人可以提供有关如何处理此问题的指导吗?任何帮助将不胜感激。
这是我的代码
Future<void> deleteUserAccount(BuildContext context) async {
final confirmed = await showDialog(
context: context,
builder: (_) {
return CupertinoAlertDialog(
title: Text('Confirm Account Deletion'),
content: Text('Are you sure you want to delete your account? This action cannot be undone.'),
actions: [
TextButton(
onPressed: () => Navigator.pop(context, false),
child: const Text('Cancel'),
),
TextButton(
onPressed: () => Navigator.pop(context, true),
child: const Text('Delete'),
),
],
);
});
if (confirmed != null && confirmed) {
final provider = Provider.of<DeleteAccountProvider>(context, listen: false);
SharedPreferences prefs = await SharedPreferences.getInstance();
String? userToken = prefs.getString('user_login_token');
final userProvider = Provider.of<UserProvider>(context, listen: false);
final email = userProvider.user?.email;
final success = await provider.deleteAccount(context, userToken ?? '', email ?? '');
if (success) {
logout();
}
}
}
Future<void> logout() async {
final prefs = await SharedPreferences.getInstance();
if (kDebugMode) {
print('Language Code After Logout: ${prefs.getString('languageCode')}');
}
if (mounted) {
context.read<UserProvider>().clearUserData();
}
await prefs.remove("user_login_token");
if (mounted) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => const OnBoardingScreen(),
),
(route) => false);
}
}
这是错误
======== Exception caught by gesture ===============================================================
The following _TypeError was thrown while handling a gesture:
Null check operator used on a null value
When the exception was thrown, this was the stack:
#0 StatefulElement.state (package:flutter/src/widgets/framework.dart:5599:44)
#1 Navigator.of (package:flutter/src/widgets/navigator.dart:2683:47)
#2 Navigator.pop (package:flutter/src/widgets/navigator.dart:2573:15)
#3 _NavigationDrawerWidgetState.deleteUserAccount.<anonymous closure>.<anonymous closure> (package:the_link/widget/navigation_drawer_widget.dart:79:44)
#4 _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1183:21)
#5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:315:24)
#6 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:652:11)
#7 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:309:5)
#8 BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:279:7)
#9 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:167:27)
#10 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:499:20)
#11 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:475:22)
#12 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:430:11)
#13 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:420:7)
#14 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:383:5)
#15 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:330:7)
#16 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:299:9)
#17 _invoke1 (dart:ui/hooks.dart:328:13)
#18 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:429:7)
#19 _dispatchPointerDataPacket (dart:ui/hooks.dart:262:31)
Handler: "onTap"
Recognizer: TapGestureRecognizer#8ddf2
debugOwner: GestureDetector
state: ready
won arena
finalPosition: Offset(121.3, 501.3)
finalLocalPosition: Offset(59.8, 23.7)
button: 1
sent tap down
====================================================================================================
我怀疑问题是你忽略了变量绑定。你有:
await showDialog(
context: context,
builder: (_) { ....
我认为你应该:
await showDialog(
context: context,
builder: (context) { ....
现在,当您执行
context
时,您正在使用第一个 Navigator.pop(context, false)
,我怀疑您不应该 - 您应该在构建器函数中使用 context
。