我目前正在开发 Firebase Instagram 克隆,我遇到了“添加帖子”屏幕的问题。当用户导航到此屏幕时,他们可以选择要上传的图像。然而,选择图像后,屏幕立即变红,显示错误消息:
空值检查运算符用于空值
我正在添加添加帖子文件中的相关代码片段、错误消息以及指向该项目的 GitHub 存储库的链接。
GitHub: https://github.com/Aabis-Ahmed-Hassan/Instagram-Clone-Firebase
添加后屏幕代码:
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:instagram_clone_firebase/post/upload_post_data.dart';
import 'package:instagram_clone_firebase/utils/colors.dart';
import 'package:instagram_clone_firebase/utils/constants/padding.dart';
import 'package:instagram_clone_firebase/view_modal/user_provider.dart';
import 'package:provider/provider.dart';
import '../utils/utils.dart';
class AddPost extends StatefulWidget {
const AddPost({super.key});
@override
State<AddPost> createState() => _AddPostState();
}
class _AddPostState extends State<AddPost> {
var _postImage;
chooseImage(BuildContext context) async {
return showDialog(
context: context,
builder: (context) => SimpleDialog(
title: Text(
'Pick an Image',
),
children: [
SimpleDialogOption(
onPressed: () async {
Navigator.pop(context);
_postImage = await Utils.pickImage(ImageSource.camera);
setState(() {});
},
child: Text(
'Capture a Picture',
),
),
SimpleDialogOption(
onPressed: () async {
Navigator.pop(context);
_postImage = await Utils.pickImage(ImageSource.gallery);
setState(() {});
},
child: Text(
'Choose from Gallery',
),
),
SimpleDialogOption(
onPressed: () {
Navigator.pop(context);
},
child: Text(
'Cancel',
),
),
],
));
}
TextEditingController _postDescription = TextEditingController();
bool loading = false;
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_postDescription.dispose();
}
postIt(
String description,
String username,
String profileImage,
String uid,
) async {
setState(() {
loading = true;
});
await uploadPostData(_postImage, uid, description, username, profileImage);
setState(
() {
loading = false;
},
);
}
@override
Widget build(BuildContext context) {
double height = MediaQuery.of(context).size.height * 1;
double width = MediaQuery.of(context).size.width * 1;
// UserModal user = Provider.of<UserProvider>(context, listen: false).getUser;
UserProvider user = Provider.of<UserProvider>(context, listen: false);
print('build');
return _postImage == null
? Center(
child: IconButton(
onPressed: () async {
await chooseImage(context);
},
icon: Icon(
Icons.upload,
),
),
)
: Scaffold(
appBar: AppBar(
backgroundColor: mobileBackgroundColor,
leading: Icon(
Icons.arrow_back,
),
title: Text(
'Add Post',
),
centerTitle: false,
actions: [
InkWell(
onTap: () {
return postIt(
_postDescription.text.toString(),
user.getUser.username.toString(),
user.getUser.imageUrl.toString(),
user.getUser.uid.toString(),
);
},
child: Text(
'Post',
style: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.w500,
fontSize: 16,
),
),
),
SizedBox(
width: width * 0.035,
),
],
),
body: Padding(
padding: EdgeInsets.symmetric(horizontal: width * padding),
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
flex: 4,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CircleAvatar(
radius: width * 0.075,
backgroundImage: NetworkImage(
user.getUser.toString(),
),
),
],
),
),
Expanded(
flex: 9,
child: TextFormField(
controller: _postDescription,
decoration: InputDecoration(
hintText: 'Write a caption...',
border: InputBorder.none,
),
),
),
Expanded(
flex: 3,
// child: Image.file(_postImage!),
child: _postImage != null
? Image.file(_postImage!)
: Container(),
),
],
),
Divider(),
Container(),
loading
? CircularProgressIndicator()
: Container(
height: 50,
width: 50,
color: Colors.blue,
),
],
),
),
);
}
}
错误:
======== 小部件库捕获异常====================================== ===================
构建 AddPost(dirty, dependency: [MediaQuery, _LocalizationsScope-[GlobalKey#8b487]], state: _AddPostState#be0c8):
时抛出以下 _TypeError 对空值使用空检查运算符导致错误的相关小部件是:
AddPost AddPost:文件:///C:/Users/aabis/StudioProjects/Instagram-Clone-Firebase/lib/view/responsiveness/mobile_layout.dart:18:5
当异常抛出时,这是堆栈:
#0 UserProvider.getUser (包:instagram_clone_firebase/view_modal/user_provider.dart:8:33)
#1 _AddPostState.build(包:instagram_clone_firebase/view/add_post.dart:159:38)
#2 StatefulElement.build (包:flutter/src/widgets/framework.dart:5592:27)
#3 ComponentElement.performRebuild(包:flutter/src/widgets/framework.dart:5480:15)
#4 StatefulElement.performRebuild (包:flutter/src/widgets/framework.dart:5643:11)
#5 Element.rebuild (包:flutter/src/widgets/framework.dart:5196:7)
#6 BuildOwner.buildScope(包:flutter/src/widgets/framework.dart:2904:19)
#7 WidgetsBinding.drawFrame(包:flutter/src/widgets/binding.dart:989:21)
#8 RendererBinding._handlePersistentFrameCallback (包:flutter/src/rendering/binding.dart:448:5)
#9 SchedulerBinding._invokeFrameCallback (包:flutter/src/scheduler/binding.dart:1386:15)
#10 SchedulerBinding.handleDrawFrame (包:flutter/src/scheduler/binding.dart:1311:9)
#11 SchedulerBinding.scheduleWarmUpFrame。 (包:flutter/src/scheduler/binding.dart:1034:7)
#15 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
(从 _Timer 类和 dart:async-patch 中删除了 3 个帧)\
我尝试过不同的事情,但都是徒劳。
您在第 159 行中使用了 user.getUser() 代替了 user.getUser().imageUrl.toString()