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

السؤال

نشر

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

انا عامل ملف shared_preferences عام او كلاس منفصل بحيث اني استعمله من اي موقع في مشروعي الكلاس شغال وبشكل ممتاز

ولكن لدي مشكله مع واحد من البيانات المخزنه فيه كالتالي:

لو قمت بوضع الكود ليعمل مع بداية تشغيل الصفحه بشكل التالي احصل على null  

  @override
  void initState() {
    // TODO: implement initState
    super.initState();




    setState(() {

      _myPreferences.init().then((value) {
        setState(() {
          _myPreferences = value;
          gatNameCUNTRY=_myPreferences.NameCuntry;

        });
      });

    });
    print('testgetname ${gatNameCUNTRY.toString()}');

ولو قمت بوضعه بشكل التالي لا احصل على اي نتيجه حتى null  لا تظهر :

    gatNameCUNTRY=_myPreferences.NameCuntry;
    print('testgetname ${gatNameCUNTRY.toString()}');

 

 

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

 هذا الشكل احصل على البيانات


@override
  void initState() {
    // TODO: implement initState
    super.initState();




    setState(() {

      _myPreferences.init().then((value) {
        setState(() {
          _myPreferences = value;
          gatNameCUNTRY=_myPreferences.NameCuntry;
          print('testgetname ${gatNameCUNTRY.toString()}');
        });
      });

    });

كيف يمكن حل هذا المشكله ؟ مع العلم انني عاملbottomNavigationBar ولو قمت بتغير الصفحه من هذا الصفحه التي تحتوي على المشكله الى صفحه مختلفه والعوده لها الكود يصبح شغال 100%100 من اي موقع في الصفحه 

لا اعلم كيف ولكن مما فهمته ان الكود لا يعمل في بداية اقلاع الصفحه ويحتاج ان انتقل الى صفحه مختلفه ثم اعود لها حتى يعمل

هل يعمل احد حل لهذا المشكله ؟

Recommended Posts

  • 0
نشر

الحالة الثانية يتم الطباعة بشكل صحيح لأن الطباعة تمت داخل دالة setState , ثم إذا أردت تشغيل الدالة قبل عمل build للواجهة يمكنك استخدام WidgetsBinding بالشكل التالي 

void initState() {
    super.initState();
    WidgetsBinding.instance
        .addPostFrameCallback((_) => mYFucntion(context));
  }

 أو استخدام SchedulerBinding بالشكل التالي 

import 'package:flutter/scheduler.dart';
SchedulerBinding.instance.addPostFrameCallback((_) => myFunction(context));

 

  • 0
نشر
بتاريخ 10 دقائق مضت قال بلال زيادة:

الحالة الثانية يتم الطباعة بشكل صحيح لأن الطباعة تمت داخل دالة setState , ثم إذا أردت تشغيل الدالة قبل عمل build للواجهة يمكنك استخدام WidgetsBinding بالشكل التالي 


void initState() {
    super.initState();
    WidgetsBinding.instance
        .addPostFrameCallback((_) => mYFucntion(context));
  }

 أو استخدام SchedulerBinding بالشكل التالي 


import 'package:flutter/scheduler.dart';
SchedulerBinding.instance.addPostFrameCallback((_) => myFunction(context));

 

مرحبا اخي قمت بعمل الكود بشكل التالي

  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    WidgetsBinding.instance.addPostFrameCallback((_) {
      _myPreferences.init().then((value) {
        setState(() {
          _myPreferences = value;

          gatNameCUNTRY=_myPreferences.NameCuntry;

        });
      });


    });
    print('testgetname ${gatNameCUNTRY.toString()}');

ولا تزال النتيجة null 

هل يوجد حل مختلف؟

  • 0
نشر
بتاريخ 22 دقائق مضت قال مروان مروان3:

مرحبا اخي قمت بعمل الكود بشكل التالي


  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    WidgetsBinding.instance.addPostFrameCallback((_) {
      _myPreferences.init().then((value) {
        setState(() {
          _myPreferences = value;

          gatNameCUNTRY=_myPreferences.NameCuntry;

        });
      });


    });
    print('testgetname ${gatNameCUNTRY.toString()}');

ولا تزال النتيجة null 

هل يوجد حل مختلف؟

صعب تحديد المشكلة بشكل مباشر، هل ممكن ترفق ملفات المشروع ؟

  • 0
نشر
بتاريخ On 4/10/2021 at 22:11 قال بلال زيادة:

صعب تحديد المشكلة بشكل مباشر، هل ممكن ترفق ملفات المشروع ؟

اهلا بك اخي

المشكله ان المشروع كامل وليس جزء محدد

قمت بالاستغناء عن الامر وستعمال sqlite  وتم حل المشكله 

لك كل الشكر اخي العزيز

  • 0
نشر
بتاريخ منذ ساعة مضت قال مروان مروان3:

اهلا بك اخي

المشكله ان المشروع كامل وليس جزء محدد

قمت بالاستغناء عن الامر وستعمال sqlite  وتم حل المشكله 

لك كل الشكر اخي العزيز

جيد جدا أيضا استخدام sqlite ايضا, فكرة جيدة بالتوفيق

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...