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

السؤال

نشر

تحيه طيبه للجميع 

احتاج الى استعمال أداة CheckboxListTile ولكني أحاول ان اجلب البيانات التي سوف يقوم المستخدم باختيارها والتي سوف تعرضها الاداة من قاعدة البيانات بمعنى ان اربط اداة CheckboxListTile بجدول من قاعدة البيانات من خلال عمل FutureBuilder بمعنى ان اضعها بداخل FutureBuilder لتصبح كالتالي:

class testpage extends StatefulWidget {


  @override
  _testtttttState createState() => _testtttttState();
}

class _testtttttState extends State<testpage> {



  @override
  void initState() {

      BooksType();


    super.initState();
  }
var apiURL;

  Future BooksType() async {
    apiURL = '*******************.php';

    var response = await http.post(Uri.parse(apiURL));
    var responsebody = jsonDecode(response.body);
    if (responsebody.length > 0) {
      return responsebody;
    }
  }



  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Column(
          children: [

      FutureBuilder(
        future: BooksType(),
        builder: (context, AsyncSnapshot snapshot) {
          if (snapshot.hasData) {
            return Padding(
              padding: const EdgeInsets.all(5.0),
              child: ListView.builder(
                  scrollDirection: Axis.vertical,
                  shrinkWrap: true,
                  physics: ScrollPhysics(),
                  itemCount: snapshot.data.length,
                  itemBuilder: (context, index) {
                    return Container(

                        child: Column(
                            children: <Widget>[
                              Card(
                                elevation: 3,
                                child:
                                CheckboxListTile(
                                        title: Text("${snapshot.data[index]['BookSpecifications']}"),
                                       value:  snapshot.data[index]['test'],
                                        onChanged: (bool ? value) {

                                        }


                                ) ),


                            ]));
                  }),
            );
          } else if (snapshot.hasError) {

            return Center(
                child: CircularProgressIndicator(
                  valueColor:
                  new AlwaysStoppedAnimation<Color>(Colors.black),
                ),);

          }

          // By default, show a loading spinner.
          return Center(
              child: SizedBox(
                height: MediaQuery.of(context).size.height / 1.3,
                child: CircularProgressIndicator(
                  valueColor:
                  new AlwaysStoppedAnimation<Color>(Colors.black),
                ),
              ));


        },
      )
    ],
        ),
      ),
    );
  }
}

 

ولكن دائما احصل على الخطاء التالي:

 Failed assertion: line 146 pos 15: 'tristate || value != null': is not true.

 

 

هل طريقتي خطاء وهل توجد طريقة مختلفة لفعل ذلك؟ ياليت الذي لديه فكره يفيدنا

Recommended Posts

  • 1
نشر

يجب استدعاء دالة تهيئة الأب أولاً:

  @override
  void initState() {

	super.initState();

      BooksType();

  }

أرجو تمرير اسم الدالة فقط للخاصية future وعدم استدعائها ضمن صنف الباني

  FutureBuilder(
        future: BooksType(),
                      ^^^^^^

    
    الصحيح 

  FutureBuilder(
        future: BooksType,

فهي دالة غير متزامنة Async.

في حال بقاء أخطاء، أرجو تحديد في أي سطر

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...