Тип флаттера 'Null' не является подтипом типа 'String' после навигации
У меня есть 4 экрана (домашний, экскурсионный, спа, подробный), и я хочу перейти от нескольких к одному подробному экрану (из дома, экскурсия, спа к деталям), сначала он работает нормально, но после того, как он дает мне: тип 'Null' is не подтип типа String. Ошибка, если я перейду со страницы «Экскурсия» или «Спа» на страницу «Подробности». но он будет работать нормально, если я перейду из дома на экран с подробностями. это Контейнер главного экрана (дочерний элемент: GestureDetector (onTap: ()=>Navigator.pushNamed(context, '/Detail',arguments:{'previousScreenData':dataList_home[index],}), дочерний элемент: Card (дочерний элемент: Center) (дочерний элемент: Столбец (дочерние элементы: [Изображение (изображение: NetworkImage(dataList_home[index][«ФОТО»])), высота: 250, размер: BoxFit.fill,),SizedBox (высота: 10,0), Столбец (дочерние элементы: [Текст (dataList_home[индекс]["LIBELLE"],),
]
),
SizedBox(height: 10.0),
Column(
children:<Widget>[
Text(
dataList_home[index]["PRICE_AD"],
),
]
),
SizedBox(height: 10.0),
Row(
mainAxisAlignment:MainAxisAlignment.spaceEvenly,
children:<Widget>[
for ( var i in iconList ) Row(
children:<Widget>[
FaIcon(iconMapping [i.toString()] ?? FontAwesomeIcons.question,),
]
),
],
),
SizedBox(height: 15.0),
]
),
),
semanticContainer: true,
clipBehavior: Clip.antiAliasWithSaveLayer,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
elevation: 5,
margin: EdgeInsets.all(10),
),
),
);
это экран спа
Container(
child: GestureDetector(
onTap: ()=>Navigator.pushNamed(context, '/Detail',arguments:{
'previousScreenData':dataList_spa[index],
}),
child: Card(
child: Center(
child: Column(
children:<Widget>[
Image(
image: NetworkImage(dataList_spa[index]["PHOTO"]),
height: 250,
fit:BoxFit.fill,
),
SizedBox(height: 10.0),
Column(
children:<Widget>[
Text(
dataList_spa[index]["LIBELLE"],
),
]
),
SizedBox(height: 10.0),
Column(
children:<Widget>[
Text(
dataList_spa[index]["PRICE_AD"],
),
]
),
SizedBox(height: 10.0),
Row(
mainAxisAlignment:MainAxisAlignment.spaceEvenly,
children:<Widget>[
for ( var i in iconList ) Row(
children:<Widget>[
FaIcon(iconMapping [i.toString()] ?? FontAwesomeIcons.question),
]
),
],
),
SizedBox(height: 15.0),
]
),
),
semanticContainer: true,
clipBehavior: Clip.antiAliasWithSaveLayer,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
elevation: 5,
margin: EdgeInsets.all(10),
),
),
);
Это подробный экран
Widget build(BuildContext context) {
dataMap=ModalRoute.of(context)?.settings.arguments as Map;//We recieve the data as a Map from the home screen
1 ответ
Я не знаю решения, но я пытаюсь решить такие проблемы:
1- Попробуйте ориентироваться, например:
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondPage()),
).then((value) => setState(() {}));
2- Попробуйте обнулить этот тип кода (используя этот знак "!" В конце):
NetworkImage(dataList_spa[index]["PHOTO"]!)
или:
Text(dataList_spa[index]["PRICE_AD"]!,),
это преобразование из типа, допускающего значение NULL, в тип, не допускающий значения NULL.
3- Возможно, i имеет значение NULL, поэтому вы передаете значение «NULL» в iconMapping.
FaIcon(iconMapping [i.toString()] ?? FontAwesomeIcons.question,),
Я знаю о нулевой проверке «??», но Дарт все равно выполнит правильный аргумент.