Flutter Dev نشر 31 يوليو 2022 أرسل تقرير نشر 31 يوليو 2022 تحيه طيبه للجميع أقوم بعملية بجلب البيانات من السيرفر وعرضها من خلال 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(''); } ), ], ), ) ) ); } } هل توجد طريقة لتفادي هذا الخطاء او حله؟ مع العلم ان الكود يعمل ولكن تظهر صفحة حمراء ورسالة الخطاء جزء من الثانية ثم تختفي ثم يظهر كود الخطاء بعدها 1 اقتباس
1 Wael Aljamal نشر 31 يوليو 2022 أرسل تقرير نشر 31 يوليو 2022 عملية التهيئة تختبر قيمة المتغير هل هي null أم لا. وبذلك وضع late ليس سليم في هذه الحالة، أي يجب أن يكون نمط المتغير nullable Future? _getTaskAsync; كما أن هنالك ملاحظة، إسناد قيمة لدالة غير متزامنة يتوجب استخدام await قبل الاستدعاء _getTaskAsync = await ApiUser(); 1 اقتباس
0 Flutter Dev نشر 31 يوليو 2022 الكاتب أرسل تقرير نشر 31 يوليو 2022 بتاريخ 10 دقائق مضت قال Wael Aljamal: عملية التهيئة تختبر قيمة المتغير هل هي null أم لا. وبذلك وضع late ليس سليم في هذه الحالة، أي يجب أن يكون نمط المتغير nullable Future? _getTaskAsync; كما أن هنالك ملاحظة، إسناد قيمة لدالة غير متزامنة يتوجب استخدام await قبل الاستدعاء _getTaskAsync = await ApiUser(); مرحبا اخي ساقوم بتجربة ذلك الا يوجد حل لوضع تحقق من البيانات في future ؟ اقتباس
0 Wael Aljamal نشر 31 يوليو 2022 أرسل تقرير نشر 31 يوليو 2022 بتاريخ الآن قال مروان مروان3: الا يوجد حل لوضع تحقق من البيانات في future ؟ أعتقد أن المشكلة في محاولة الدالة ApiUser الوصول للحالة وتعديلها قبل الانتهاء من التهيئة. setState(() { showicon = true; }); أي الأفضل أن تكون قيمة showicon=true في البداية، اقتباس
السؤال
Flutter Dev
تحيه طيبه للجميع
أقوم بعملية بجلب البيانات من السيرفر وعرضها من خلال FutureBuilder و ListView
المشكلة انني في كل مره احضر البيانات احصل على الخطاء التالي:
LateInitializationError: Field '_getTaskAsync@199262776' has not been initialized.
وموقع الخطاء في future
الكود المستعمل:
هل توجد طريقة لتفادي هذا الخطاء او حله؟ مع العلم ان الكود يعمل ولكن تظهر صفحة حمراء ورسالة الخطاء جزء من الثانية ثم تختفي ثم يظهر كود الخطاء بعدها
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.