#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(), ); })); }}