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

مشكلة في Flutter يظهر الخطأ Late Initialization Error Field get Task Async has not been initialized

Flutter Dev

السؤال

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

أقوم بعملية بجلب البيانات من السيرفر وعرضها من خلال FutureBuilder و ListView

المشكلة انني في كل مره احضر البيانات احصل على الخطاء التالي:

LateInitializationError: Field '_getTaskAsync@199262776' has not been initialized.

وموقع الخطاء في future

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

class _HomePageState extends State<MyApp> {

  bool showicon=false;
  var ListDataPrefs;
  late Future _getTaskAsync;
  @override
  void initState() {
    Future.delayed(Duration.zero, () {
      _getTaskAsync=ApiUser();
    });

    super.initState();
  }

  Future ApiUser() async {
    setState(() {
      showicon = true;
    });
    final String url = '***************=';
    var response = await http.post(Uri.parse(url));
    var responsebody = jsonDecode(response.body);

    if (responsebody.length > 0) {
      return responsebody;
    } else {
      showicon = false;
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(

        body:Center(child: Container(

        child: ListView(
          children: <Widget>[
          FutureBuilder(
                future: _getTaskAsync,
                builder: (context, AsyncSnapshot snapshot) {
                  if (snapshot.hasData) {
                    return ListView.builder(
                        physics: ScrollPhysics(),
                        scrollDirection: Axis.vertical,
                        shrinkWrap: true,
                        itemCount: snapshot.data.length,
                        itemBuilder: (context, index) {
                          return
                          Card(
                        
                            child: Container(
                              padding: EdgeInsets.all(6),
                              child: Row(
                                children: <Widget>[

                                  Flexible(
                                    child: Column(

                                      children: <Widget>[
                                        MergeSemantics(
                                          child: Row(
                                            children: <Widget>[
                                              Flexible(
                                                child: Text(
                                                    "${snapshot.data[index]['name']}",

                                                ),
                                              )
                                            ],
                                          ),
                                        ),


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

                  } else if (snapshot.hasError) {

                    return Center(
                        child: Image.asset(
                          'assets/data.png',
                          fit: BoxFit.contain,
                          width: 180,
                          height: 180,
                        ));

                  }


                  return showicon? SizedBox(
                    height: MediaQuery.of(context).size.height / 1.3,
                    child: Center(
                      child: CircularProgressIndicator(
                        valueColor:
                        new AlwaysStoppedAnimation<Color>(Colors.black),
                      ),
                    ),
                  ):Text('');
                }



            ),


          ],
        ),
        )
        )
   
   
    );
  }
}

هل توجد طريقة لتفادي هذا الخطاء او حله؟ مع العلم ان الكود يعمل ولكن تظهر صفحة حمراء  ورسالة الخطاء جزء من الثانية ثم تختفي ثم يظهر كود الخطاء بعدها

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

Recommended Posts

  • 1

عملية التهيئة تختبر قيمة المتغير هل هي null أم لا.

وبذلك وضع late ليس سليم في هذه الحالة، أي يجب أن يكون نمط المتغير nullable

Future? _getTaskAsync;

 

كما أن هنالك ملاحظة، إسناد قيمة لدالة غير متزامنة يتوجب استخدام await قبل الاستدعاء

 _getTaskAsync = await ApiUser();

 

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

  • 0
بتاريخ 10 دقائق مضت قال Wael Aljamal:

عملية التهيئة تختبر قيمة المتغير هل هي null أم لا.

وبذلك وضع late ليس سليم في هذه الحالة، أي يجب أن يكون نمط المتغير nullable


Future? _getTaskAsync;

 

كما أن هنالك ملاحظة، إسناد قيمة لدالة غير متزامنة يتوجب استخدام await قبل الاستدعاء


 _getTaskAsync = await ApiUser();

 

مرحبا اخي

ساقوم بتجربة ذلك

الا يوجد حل لوضع تحقق من البيانات في future ؟

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

  • 0
بتاريخ الآن قال مروان مروان3:

الا يوجد حل لوضع تحقق من البيانات في future ؟

أعتقد أن المشكلة في محاولة الدالة ApiUser الوصول للحالة وتعديلها قبل الانتهاء من التهيئة.

 setState(() {
      showicon = true;
    });

أي الأفضل أن تكون قيمة showicon=true في البداية،

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...