#flutter #android-studio #dart #visual-studio-code #flutter-layout
Вопрос:
Я новичок в flutter и получаю ошибку при передаче строки, искал везде и, наконец, добавил это в StackOverflow
ошибка в том, что
Error: The argument type 'String?' can't be assigned to the parameter type 'String' because 'String?' is nullable and 'String' isn't.
void errorSnackBar(BuildContext context, String? text) {
ScaffoldMessenger.of(context).showSnackBar(new SnackBar(
duration: new Duration(seconds: 4),
content: new Row(
children: <Widget>[
Icon(
Icons.error,
color: Colors.red,
),
Padding(
padding: const EdgeInsets.fromLTRB(10.0, 0, 0, 0),
child: new Text(text),
),
],
),
));
}
Комментарии:
Ответ №1:
Text()
требует a String
в качестве своего первого параметра (т. е. Нет null
). null
не является допустимым значением для типа String
, так же как 123
не является допустимым значением для типа String
.
Если ваше сообщение об ошибке является a String?
, вам необходимо обработать случай, в котором оно находится null
, прежде чем вы сможете передать его Text()
. Некоторые варианты:
- Проверьте, является ли он нулевым, и вернитесь раньше:
void errorSnackBar(BuildContext context, String? text) {
if (text == null) return;
// dart uses "type promotion" to know that text is definitely not null here
final textWidget = Text(text); // this is fine
ScaffoldMessenger.of(context) ... // show snackbar
}
- Если вы знаете, что звоните только
errorSnackBar
тогда, когдаtext
значение не равно нулю, попробуйте изменить его тип:
void errorSnackBar(BuildContext context, String text) {
// rest of the method the same
}
Комментарии:
1. Спасибо, я ценю ваш ответ.если (текст == null) возвращается; окончательный TextWidget = Текст(текст); работал на меня, я не смог угадать эту строку? текст сохраняет значение null в тексте
Ответ №2:
Это может помочь кому-то новому, у меня были похожие проблемы, как я их решаю
Padding(
padding: const EdgeInsets.fromLTRB(10.0, 0, 0, 0),
child: new Text(text ?? 'Default Value'),
),
для получения дополнительной информации перейдите по этой ссылке
Ответ №3:
У меня была та же проблема
В моем случае мне пришлось использовать нулевую безопасность.
final String? name
Мне пришлось использовать знак!, чтобы это сработало. Такие, как: если бы я хотел назвать это
index.name!
Ответ №4:
преобразуйте текст в строку с помощью .toString()
void errorSnackBar(BuildContext context, String? text) {
ScaffoldMessenger.of(context).showSnackBar(new SnackBar(
duration: new Duration(seconds: 4),
content: new Row(
children: <Widget>[
Icon(
Icons.error,
color: Colors.red,
),
Padding(
padding: const EdgeInsets.fromLTRB(10.0, 0, 0, 0),
child: new Text(text.toString()),
),
],
),
));
}