Тип флаттера '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,),

Я знаю о нулевой проверке «??», но Дарт все равно выполнит правильный аргумент.

Другие вопросы по тегам