हैलो मेरे पास काउंटर के साथ एक बैज है और जब भी मैं अपना एंड्रॉइड अलार्म मैनेजर शुरू करता हूं तो उसे काउंटर बढ़ाना चाहिए और यूआई लाइव भी अपडेट करना चाहिए। मैं इसे आइसोलेट के साथ करता हूं। सब कुछ ठीक काम करता है लेकिन जब मैं एक नए पेज रूट पर जाता हूं और फिर वापस जाता हूं तो सेटस्टेट अब और निष्पादित नहीं होता है। मेरी त्रुटि कहाँ है?

  int _counter = 0;

  String isolateName = 'isolate';
  final ReceivePort port = ReceivePort();
  static SendPort uiSendPort;


  @override
  void initState() {
    super.initState();
    AndroidAlarmManager.initialize();

    IsolateNameServer.registerPortWithName(
      port.sendPort,
      isolateName,
    );

    port.listen((_) async => await _incrementCounter());
  }

  Future<void> _incrementCounter() async {
    print('Increment counter!');

    // Ensure we've loaded the updated count from the background isolate.
    await prefs.reload();

    if (!mounted) return;
    setState(() {
      print("geht in die SetState");
      _counter++;
    });
  }

///
///This is in my Callback for my Android Alarm Manager...
          final prefs = await SharedPreferences.getInstance();
          int currentCount = prefs.getInt(countKey) ?? 0;
          await prefs.setInt(countKey, currentCount + 1);

          // This will be null if we're running in the background.
          uiSendPort ??= IsolateNameServer.lookupPortByName('isolate');
          uiSendPort?.send(null);

1
tyler.morton 6 अक्टूबर 2021, 12:54

1 उत्तर

सबसे बढ़िया उत्तर

initState लौटने के बाद फिर से कॉल नहीं किया जाता है, लौटने के बाद आप जो फ़ंक्शन चाहते हैं उसे बाध्य करने का प्रयास करें

ऐसा कुछ

Navigator.of(context)
  .push(MaterialPageRoute(
     builder: (context) => YourScreen№2(),
  ))
  .then((value) {
    Foo() <- your func
  });
1
novol 6 अक्टूबर 2021, 13:05
आपके उत्तर के लिए धन्यवाद। लौटने के बाद फ़ंक्शन को बलपूर्वक करने से आपका क्या तात्पर्य है?
 – 
tyler.morton
6 अक्टूबर 2021, 13:01
मैंने उत्तर संपादित किया
 – 
novol
6 अक्टूबर 2021, 13:06
मेरा मतलब यह कोड initState void initState() { super.initState(); AndroidAlarmManager.initialize(); IsolateNameServer.registerPortWithName( port.sendPort, isolateName, ); port.listen((_) async => await _incrementCounter()); } में है
 – 
novol
6 अक्टूबर 2021, 13:07
ठीक है धन्यवाद कि काम किया लेकिन सिर्फ Navigator.of(context).push के साथ। क्या Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => My2Site(),),(_) => false); के साथ भी वही परिणाम प्राप्त करना संभव है?
 – 
tyler.morton
6 अक्टूबर 2021, 14:47
आपको लगता है, यहां और अधिक api.flutter.dev/flutter/widgets/Navigator/…
 – 
novol
6 अक्टूबर 2021, 15:36