• 1402/11/28

عدم دریافت همزمان چند دیتا از سرور :

(سوال تکراری نیست)

سلام و عرض ادب

در صفحه اصلی(home) برنامه من 5 لیست وجود داره که اطلاعاتش رو از سرور میخونم،

به ازای هر لیست یه بیلدر گذاشتم و با buildwhen بهش میگم هر موقع فلان لیست کامل دریافت شد اطلاعات رو نشون بده.

اما مشکل اینکه همزمان 5 لیست رو پر نمیکنه و صفحم کامل لود نمیشه در صورتیکه من طبق آموزش ها کاملا صبر کردم تا دیتا از سرور گرفته بشه:

 

Widget build(BuildContext context) {
    return FutureBuilder(
      future: Future.wait([
        SlideShowNetwork.isData(),
        CourseNetwork.isData(),
        CategoryNetwork.isData(),
        TeacherNetwork.isData(),
        StudentNetwork.isData(),
        MainScreen.registerList!
      ]),
      builder: (context, AsyncSnapshot<List<dynamic>> snapshot) {
        if (snapshot.data == null) {
          return const ShimmerHome();
        }
        if (snapshot.data![0] == true &&
            snapshot.data![1] == true &&
            snapshot.data![2] == true &&
            snapshot.data![3] == true &&
            snapshot.data![4] == true) {
          return baseBody();
        } else if (snapshot.hasError) {
          return Text("${snapshot.error}");
        }
        return const ShimmerHome();
      },
    );

 

و به ازای هر لیست یا ویجت این کد رو نوشتم:

 

 BlocBuilder<HomeBloc, HomeState>(
            buildWhen: (previous, current) {
              if (current is SlideShowLoadingState ||
                  current is SlideShowSuccessState ||
                  current is SlideShowErrorState) {
                return true;
              } else {
                return false;
              }
            },
            builder: (context, state) {
              if (state is SlideShowSuccessState) {
                return SlideShowWidget(list: state.slideshowList);
              } else if (state is SlideShowErrorState) {
                return Center(
                  child: Text(
                    state.error,
                    style: const TextStyle(fontSize: 22.0),
                  ),
                );
              } else if (state is SlideShowLoadingState) {
                return CircularProgressIndicator();
              } else {
                return Center(
                  child: Text(
                    'hiiiiiiiiiiiiiii',
                    style: const TextStyle(fontSize: 22.0),
                  ),
                );

              }

    کلاس event  state bloc طبق آموزش نوشته شده،

اینم ازنحوه دریافت اطلاعاتم از سرور(برای یکی از لیست ها:مثلا اسلایدشو)

class SlideShowNetwork {
  List<SlideShowModel> slideShowList = [];
 static Uri UrlSlideShow = Uri.parse('https://retoolapi.dev/dGDySO/data');
  static Future<bool> isData() async {
    bool result = false;  
    await http.get(UrlSlideShow).then(
      (response) {
        if (response.statusCode == 200) {
          List jsonlistSlideShow = convert.jsonDecode(response.body);
          if (jsonlistSlideShow.isEmpty) {
            result = false;
          } else {
            result = true;
          }
        }
      },
    );
    return result;
  }


  Future<List<SlideShowModel>> getData() async {
    slideShowList.clear();
    await http.get(UrlSlideShow).then(
      (response) {
        if (response.statusCode == 200) {
           List jsonlistSlideShow = convert.jsonDecode(response.body);
          jsonlistSlideShow.forEach((json) {
           slideShowList.add(SlideShowModel.fromJson(json));
          });
        }
      },
    );
    return slideShowList;
  }
  • 1402/11/30
  • ساعت 09:19

سلام وقتتون بخیر ، ببینید شما بر اساس هر API باید بیاید و State , Event خودشو بسازید ، Future.wait هم که گذاشتید اینجوریه که همش باید کامل بشه !


logo-enamadlogo-samandehi