• 0

كيفية ايقاف CircularProgressIndicator() flutter

السلام عليكم ورحمة الله وبركاته 

لدي قائمة تعرض بيانات من قاعدة البيانات تاتي لها في وقت جلب البيانات وحتى ظهور البيانات يظهر للمستخدم CircularProgressIndicator() حتى يعلم بوجود عملية تحدث في الخلفية.

الامر ممتاز كذا ولكن توجد مشكلة هذا CircularProgressIndicator() تستمر في العمل الى لا نهاية في حالة عدم وجود بيانات في قاعدة البيانات وهنا تكمن المشكلة من المفترض ان تعمل لوقت محدد وفي حالة عدم وجود بيانات في قاعدة البيانات تتوقف عن العمل وتختفي هل يوجد طريقة لعمل ذلك؟ بحيث لو لم يكن هنالك بيانات يمكن جلبها تتوقف عن العمل 

هذا الكود المستعمل :


class MainListView extends StatefulWidget {

  MainListViewState createState() => MainListViewState();

}

class MainListViewState extends State {

  final String apiURL = 'http://====================/getStudentInfo.php';

  Future<List<Studentdata>> fetchStudents() async {

    var response = await http.get(apiURL);

    if (response.statusCode == 200) {

      final items = json.decode(response.body).cast<Map<String, dynamic>>();

      List<Studentdata> studentList = items.map<Studentdata>((json) {
        return Studentdata.fromJson(json);
      }).toList();

      return studentList;
    }
    else {
      throw Exception('Failed to load data from Server.');
    }
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Studentdata>>(
      future: fetchStudents(),
      builder: (context, snapshot) {

        if (!snapshot.hasData)
          return Center(
            child: CircularProgressIndicator()
        );

        return ListView(
          children: snapshot.data
              .map((data) => Column(children: <Widget>[
            GestureDetector(

              child: Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [

                    Padding(
                        padding: EdgeInsets.fromLTRB(20, 5, 0, 5),
                        child: Text(data.studentName,
                            style: TextStyle(fontSize: 21),
                            textAlign: TextAlign.left))

                  ]),),

            Divider(color: Colors.black),
          ],))
              .toList(),
        );
      },
    );
  }
}

 

تمّ تعديل بواسطة Marwan800

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 1

مرحبا عزيزي, استخدم هذا الكود

class MainListView extends StatefulWidget {

  MainListViewState createState() => MainListViewState();

}

class MainListViewState extends State {

  final String apiURL = 'http://====================/getStudentInfo.php';

  Future<List<Studentdata>> fetchStudents() async {

    var response = await http.get(apiURL);

    if (response.statusCode == 200) {

      final items = json.decode(response.body).cast<Map<String, dynamic>>();

      List<Studentdata> studentList = items.map<Studentdata>((json) {
        return Studentdata.fromJson(json);
      }).toList();

      return studentList;
    }
    else {
      throw Exception('Failed to load data from Server.');
    }
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Studentdata>>(
      future: fetchStudents(),
      builder: (context, snapshot) {

        if (!snapshot.hasData)
          return Center(
              child: CircularProgressIndicator()
          );
        
        ///Alert there is a modification
        if(snapshot.data.length == 0){
          return Text('Sorry:( there is no data');
        }

        return ListView(
          children: snapshot.data
              .map((data) => Column(children: <Widget>[
            GestureDetector(

              child: Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [

                    Padding(
                        padding: EdgeInsets.fromLTRB(20, 5, 0, 5),
                        child: Text(data.studentName,
                            style: TextStyle(fontSize: 21),
                            textAlign: TextAlign.left))

                  ]),),

            Divider(color: Colors.black),
          ],))
              .toList(),
        );
      },
    );
  }
}

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

اذا كنت تستخدم لغة كوتلن : بامكانك استخدام if بامر انه اذا لم يكن هناك بيانات تضع امر exit

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ منذ ساعة مضت قال Moataz Fouad:

مرحبا عزيزي, استخدم هذا الكود


class MainListView extends StatefulWidget {

  MainListViewState createState() => MainListViewState();

}

class MainListViewState extends State {

  final String apiURL = 'http://====================/getStudentInfo.php';

  Future<List<Studentdata>> fetchStudents() async {

    var response = await http.get(apiURL);

    if (response.statusCode == 200) {

      final items = json.decode(response.body).cast<Map<String, dynamic>>();

      List<Studentdata> studentList = items.map<Studentdata>((json) {
        return Studentdata.fromJson(json);
      }).toList();

      return studentList;
    }
    else {
      throw Exception('Failed to load data from Server.');
    }
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Studentdata>>(
      future: fetchStudents(),
      builder: (context, snapshot) {

        if (!snapshot.hasData)
          return Center(
              child: CircularProgressIndicator()
          );
        
        ///Alert there is a modification
        if(snapshot.data.length == 0){
          return Text('Sorry:( there is no data');
        }

        return ListView(
          children: snapshot.data
              .map((data) => Column(children: <Widget>[
            GestureDetector(

              child: Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [

                    Padding(
                        padding: EdgeInsets.fromLTRB(20, 5, 0, 5),
                        child: Text(data.studentName,
                            style: TextStyle(fontSize: 21),
                            textAlign: TextAlign.left))

                  ]),),

            Divider(color: Colors.black),
          ],))
              .toList(),
        );
      },
    );
  }
}

 

شاكر لك ردك اخي

انا سبق وجربت هذا الطريقة والمفترض تنجح فعلا ولكن لا اعلم لماذا لا تعمل لدي ولا احصل على اشعار اذا كان لا توجد بيانات 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ 49 دقائق مضت قال Marwan800:

شاكر لك ردك اخي

انا سبق وجربت هذا الطريقة والمفترض تنجح فعلا ولكن لا اعلم لماذا لا تعمل لدي ولا احصل على اشعار اذا كان لا توجد بيانات 

ربما تحتاج لمكتبة لتشغيل الامر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ الآن قال Marwan800:

شاكر لك ردك اخي

انا سبق وجربت هذا الطريقة والمفترض تنجح فعلا ولكن لا اعلم لماذا لا تعمل لدي ولا احصل على اشعار اذا كان لا توجد بيانات 

لا بأس حاول مرة اخري..قمت بعمل تعديل بسيط

class MainListView extends StatefulWidget {

  MainListViewState createState() => MainListViewState();

}

class MainListViewState extends State {

  final String apiURL = 'http://====================/getStudentInfo.php';

  Future<List<Studentdata>> fetchStudents() async {

    var response = await http.get(apiURL);

    if (response.statusCode == 200) {

      final items = json.decode(response.body).cast<Map<String, dynamic>>();

      List<Studentdata> studentList = items.map<Studentdata>((json) {
        return Studentdata.fromJson(json);
      }).toList();

      return studentList;
    }
    else {
      throw Exception('Failed to load data from Server.');
    }
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Studentdata>>(
      future: fetchStudents(),
      builder: (context, snapshot) {

        if (!snapshot.hasData)
          return Center(
              child: CircularProgressIndicator()
          );

        ///Alert there is a modification
        if(snapshot.data == null ){
          return Text('Sorry:( there is no data');
        }

        return ListView(
          children: snapshot.data
              .map((data) => Column(children: <Widget>[
            GestureDetector(

              child: Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [

                    Padding(
                        padding: EdgeInsets.fromLTRB(20, 5, 0, 5),
                        child: Text(data.studentName,
                            style: TextStyle(fontSize: 21),
                            textAlign: TextAlign.left))

                  ]),),

            Divider(color: Colors.black),
          ],))
              .toList(),
        );
      },
    );
  }
}

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0
بتاريخ On 31‏/12‏/2020 at 00:05 قال Moataz Fouad:

لا بأس حاول مرة اخري..قمت بعمل تعديل بسيط


class MainListView extends StatefulWidget {

  MainListViewState createState() => MainListViewState();

}

class MainListViewState extends State {

  final String apiURL = 'http://====================/getStudentInfo.php';

  Future<List<Studentdata>> fetchStudents() async {

    var response = await http.get(apiURL);

    if (response.statusCode == 200) {

      final items = json.decode(response.body).cast<Map<String, dynamic>>();

      List<Studentdata> studentList = items.map<Studentdata>((json) {
        return Studentdata.fromJson(json);
      }).toList();

      return studentList;
    }
    else {
      throw Exception('Failed to load data from Server.');
    }
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Studentdata>>(
      future: fetchStudents(),
      builder: (context, snapshot) {

        if (!snapshot.hasData)
          return Center(
              child: CircularProgressIndicator()
          );

        ///Alert there is a modification
        if(snapshot.data == null ){
          return Text('Sorry:( there is no data');
        }

        return ListView(
          children: snapshot.data
              .map((data) => Column(children: <Widget>[
            GestureDetector(

              child: Row(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [

                    Padding(
                        padding: EdgeInsets.fromLTRB(20, 5, 0, 5),
                        child: Text(data.studentName,
                            style: TextStyle(fontSize: 21),
                            textAlign: TextAlign.left))

                  ]),),

            Divider(color: Colors.black),
          ],))
              .toList(),
        );
      },
    );
  }
}

 

كل الشكر لك اخي الكريم

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن