اذهب إلى المحتوى
  • 0

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

Marwan800

السؤال

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

لدي قائمة تعرض بيانات من قاعدة البيانات تاتي لها في وقت جلب البيانات وحتى ظهور البيانات يظهر للمستخدم 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
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

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

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

 

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...