как перенести snapshot.data.data(); в нулевую безопасность

#flutter #dart-null-safety

Вопрос:

это код, который может мне помочь, как изменить это на нулевую безопасность, я получаю ошибки в .data(). я изменил свой проект на нулевую безопасность, а затем столкнулся с этой проблемой

в этом и заключается ошибка

Метод «данные» не может быть вызван безоговорочно, потому что получатель может быть «нулевым». Попробуйте сделать вызов условным (используя»?») или добавить нулевую проверку к цели («!»).

Maplt;String, dynamicgt;? documentData = snapshot.data.data();

 class HomeSlider extends StatefulWidget {  final String? doc_id;  HomeSlider({this.doc_id});  @override  _MyAppState createState() =gt; _MyAppState(); }  class _MyAppState extends Statelt;HomeSlidergt; {  FirebaseServices _firebaseServices = FirebaseServices();  int activeIndex = 1;   @override  Widget build(BuildContext context) {  super.build(context);  return Container(  // height: 200,  child: FutureBuilder(  future: _firebaseServices.sliderRef  .doc(widget.doc_id == null ? "Slider" : widget.doc_id)  .get(),  builder: (context, snapshot) {  if (snapshot.hasError) {  return Center(  child: Text("Error: ${snapshot.error}"),  );  }   if (snapshot.connectionState == ConnectionState.done) {   // the error is here in data()  // Firebase Document Data Map  Maplt;String, dynamicgt; documentData = snapshot.data.data();   List? imageList = documentData['images'];  List? suid = documentData['suid'];   return SliderBody(  imageList: imageList,  suid: suid,  );  }  return Center(  child: CircularProgressIndicator(),  );  }));  }}  

Комментарии:

1. попробуйте snapshot.data! .данные()

2. нет. не сработало. у тебя есть еще какие-нибудь идеи?

3. Не могли бы вы предоставить еще немного кода, пожалуйста, чтобы мы могли понять, откуда исходит ошибка, например, что такое data() и чего вы пытаетесь достичь.

4. я добавил весь код

5. когда вы сделали снимок.данные! .data() , у вас все еще была та же ошибка безопасности null?

Ответ №1:

тебе следует пойти с

 Maplt;String, dynamicgt;? documentData = snapshot!.data.data();  

Комментарии:

1. нет, это не работает. у меня все еще есть эта проблема

2. а как насчет моментального снимка? .данные! .данные();

3. нет, все еще сталкиваюсь с той же ошибкой

4. я также добавил весь код, вы можете посмотреть

5. можете ли вы попробовать один раз, когда окончательные данные = снимок.данные; Картаlt;Строка, динамическаяgt; documentData = данные.данные();

Ответ №2:

Проблема была в builder: (context, snapshot) { том, что после добавления AsyncSnapshot и, наконец, вот так. builder: (context, AsyncSnapshot snapshot) { а также добавить ! перед .data()

 class HomeSlider extends StatefulWidget {  final String? doc_id;  HomeSlider({this.doc_id});  @override  _MyAppState createState() =gt; _MyAppState(); }  class _MyAppState extends Statelt;HomeSlidergt; {  FirebaseServices _firebaseServices = FirebaseServices();  int activeIndex = 1;   @override  Widget build(BuildContext context) {  super.build(context);  return Container(  // height: 200,  child: FutureBuilder(  future: _firebaseServices.sliderRef  .doc(widget.doc_id == null ? "Slider" : widget.doc_id)  .get(),  builder: (context,AsyncSnapshot snapshot) {  if (snapshot.hasError) {  return Center(  child: Text("Error: ${snapshot.error}"),  );  }   if (snapshot.connectionState == ConnectionState.done) {   // the error is here in data()  // Firebase Document Data Map  Maplt;String, dynamicgt; documentData = snapshot.data!.data();   List? imageList = documentData['images'];  List? suid = documentData['suid'];   return SliderBody(  imageList: imageList,  suid: suid,  );  }  return Center(  child: CircularProgressIndicator(),  );  }));  }}