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

السؤال

نشر (معدل)

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

لدي قائمة تعرض بيانات من قاعدة البيانات تاتي لها في وقت جلب البيانات وحتى ظهور البيانات يظهر للمستخدم 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
نشر
  بتاريخ On 30‏/12‏/2020 at 17:53 قال 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
نشر
  بتاريخ On 30‏/12‏/2020 at 19:12 قال Marwan800:

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

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

أظهر المزيد  

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

  • 0
نشر
  بتاريخ On 30‏/12‏/2020 at 19:12 قال 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 30‏/12‏/2020 at 20: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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...