I am trying to assign values after a specific condition has been matched, but I get error saying the variable must be assigned before I can use it.
return ListView(
children: snapshot.data!.docs.map((doc) {
Map<String, dynamic> data =
doc.data()! as Map<String, dynamic>;
// user Id
var userId = currentUser.uid;
// Recipient Id
var recipientId = data['latestMessage']['id'];
// Defined variables
String key;
String name;
generateChatId() {
if (userId.length > recipientId.length) {
return userId '-' recipientId;
} else {
return recipientId '-' userId;
}
}
if (doc.id == generateChatId()) {
key = data['latestMessage']['id'] as String;
name = data['latestMessage']['name'] as String;
} else if (recipientId == userId) {
key = data['latestMessage']['id'] as String;
name = data['latestMessage']['name'] as String;
}
return ListTile(
title: Text(key),
subtitle: Text(name),
)
}).toList(),
);
In the above code, variables key and name are defined, then assigned values in the if statements. Are the variable then not assigned outside the if statements, when used in the ListTile?
CodePudding user response:
return ListView(
children: snapshot.data!.docs.map((doc) {
Map<String, dynamic> data? =
doc.data()! as Map<String, dynamic>;
// user Id
late var userId = currentUser.uid;
// Recipient Id
late var recipientId = data['latestMessage']['id'];
// Defined variables
String? key;
String? name;
generateChatId() {
if (userId.length > recipientId.length) {
return userId '-' recipientId;
} else {
return recipientId '-' userId;
}
}
if (doc.id == generateChatId()) {
key = data['latestMessage']['id'] as String;
name = data['latestMessage']['name'] as String;
} else if (recipientId == userId) {
key = data['latestMessage']['id'] as String;
name = data['latestMessage']['name'] as String;
}
return ListTile(
title: Text(key),
subtitle: Text(name),
)
}).toList(),
);
try this one
CodePudding user response:
Null safety
The reason your code is getting an error is because of Dart's null safety feature. Null safety features added after Flutter 2.0.
'Key' or 'name' are defined and branches 'if' and 'else-if' are performed. However, if there is no value suitable for the condition of 'if' or 'else-if', no value is assigned to 'key' or 'name'.
This is why your code is caught by Dart's null safety error.
There are 3 ways to resolve errors in your code.
1. Use Nullable Type
String? key;
String? name;
2. Initialize key variable
String key = ""; // "" is not Null
String name = "";
3. Add else conditional statement
...
if (doc.id == generateChatId()) {
key = data['latestMessage']['id'] as String;
name = data['latestMessage']['name'] as String;
} else if (recipientId == userId) {
key = data['latestMessage']['id'] as String;
name = data['latestMessage']['name'] as String;
} else {
// add your code here
}
...
good luck
