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

السؤال

نشر (معدل)

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...