大家好,希望你們做得好我有一個通過顫振語言開發應用程式的代碼,但這個錯誤出現在 list.dart 中。此 list.dart 檔案應顯示來自 firebase 的帖子以及影像(如果有)。
我不知道答案
這是代碼
import 'package:flutter/material.dart';
import 'package:insight_software/models/postModel.dart';
import 'package:insight_software/other_screen/userFunction.dart';
import 'package:provider/provider.dart';
import '../models/user.dart';
class ListPost extends StatefulWidget {
ListPost({Key? key}) : super(key: key);
@override
_ListPostState createState() => _ListPostState();
}
class _ListPostState extends State<ListPost> {
UserService _userService = UserService();
@override
Widget build(BuildContext context) {
List<postModel?> posts = Provider.of<List<postModel?>>(context);
return ListView.builder(
itemCount: posts.length,
itemBuilder: (context, index) {
final Post = posts[index];
return StreamBuilder(
stream: _userService.getUserInfo(Post!.creator),
builder:
(BuildContext context, AsyncSnapshot<UserModel?> snapshot) {
// if (!snapshot.hasData) {
// return Center(child: CircularProgressIndicator());
// }
return ListTile(
title: Padding(
padding: EdgeInsets.fromLTRB(0, 15, 0, 15),
child: Row(
children: [
snapshot.data!.profileImageUrl != ''
? CircleAvatar(
radius: 20,
backgroundImage:
NetworkImage(snapshot.data!.profileImageUrl))
: Icon(
Icons.person,
size: 30,
),
SizedBox(width: 10),
Text(snapshot.data!.name),
],
),
),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.fromLTRB(0, 15, 0, 15),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(Post.post),
SizedBox(height: 20),
Text(Post.timestamp.toDate().toString())
],
),
),
Divider(),
],
),
);
});
},
);
}
}
誰知道我如何解決這個問題,請幫助我。
我的 postModel 類:
import 'package:cloud_firestore/cloud_firestore.dart';
class postModel {
final String id;
final String creator;
final String post;
final Timestamp timestamp;
postModel(
{required this.id,
required this.creator,
required this.post,
required this.timestamp});
}
我的用戶模型類:
class UserModel {
final String id;
final String bannerImageUrl;
final String profileImageUrl;
final String name;
final String email;
UserModel({
required this.id,
required this.bannerImageUrl,
required this.profileImageUrl,
required this.name,
required this.email,
});
}
這是getUserInfo
UserModel? _userFromFirebaseSnapshot(DocumentSnapshot snapshot) {
return snapshot != null
? UserModel(
id: snapshot.id,
name: snapshot.get('First Name') ?? '',
profileImageUrl: snapshot.get('profileImageUrl') ?? '',
bannerImageUrl: snapshot.get('bannerImageUrl') ?? '',
email: snapshot.get('email') ?? '',
)
: null;
}
Stream<UserModel?> getUserInfo(uid) {
return FirebaseFirestore.instance
.collection("Users")
.doc(uid)
.snapshots()
.map(_userFromFirebaseSnapshot);
}
uj5u.com熱心網友回復:
當您在未初始化的可為空的實體上使用 bang 運算子 (!) 時會發生此錯誤。
String? foo; // Nullable String
void main() {
var len = foo!.length; // Runtime error: Null check operator used on a null value
}
有關更多詳細資訊,您可以查看此答案。
所以你可以更新你的代碼:
stream: _userService.getUserInfo(Post!.creator),
和stream: _userService.getUserInfo(Post?.creator ?? ''),
和snapshot.data!.profileImageUrl != ''
和(snapshot.data?.profileImageUrl ?? '') != ''
和NetworkImage(snapshot.data!.profileImageUrl))
和NetworkImage(snapshot.data?.profileImageUrl) ?? '')
和Text(snapshot.data!.name),
和Text(snapshot.data?.name ?? ''),
uj5u.com熱心網友回復:
錯誤:對空值使用空檢查運算子
解決這個問題的兩種方法。
在您的模型類中設定變數可為空
final String? profileImageUrl;使用?.
要么
如果為 null,則設定默認值。
profileImageUrl ?? ''如果值為 null => ?? ''。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/433751.html
標籤:扑
下一篇:Laravel收據專案添加
