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

السؤال

نشر

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

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

قمت بتطبيق عمل الاضافة workmanager flutter  لجعل التطبيق يعمل في الخلفية التطبيق شغال على المنصتين اندرويد وايفون ولكن توجد مشكلة

على الاندرويد يجب اضافة السطر البرمجي التالي حتى يعمل كل 15 دقيقة في خلفية التطبيق:

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


  Workmanager.registerPeriodicTask(
     "1",
     fetchBackground,
      frequency: Duration(minutes: 15),
 );



  }

 

بالمقابل لو اخذنا التطبيق على منصة ios رح يظهر لنا انه تكون مشكله بحسب كلام موقع فلاتر ف منصة ios  لا تدعم عمل خاصية registerPeriodicTask ولو حذفت هذا السطر ورجعنا لنظام اندرويد ما رح يعمل على الاندرويد 

كيف ممكن نحل هذا المشكلة ؟ بحيث انه ما يتعرض في المنصتين 

 

اما المشكلة الثانية لو حذفنا registerPeriodicTask عشان نجعل workmanager لزم نذهب الى xcode ثم من قائمة Debug → Simulate Background Fetch حتى يعمل هذا مشكلة كيف نجعله يعمل بشكل مستمر بدون هذا الامر ؟ ايضا مع هذا الطريقة يعمل لمرة واحدة فقط ولا يعود يعمل بعدها ما لم اعمل نفس الخطوه من جديد Debug → Simulate Background Fetch

الكود المستخدم لدي كامل:

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:workmanager/workmanager.dart';
import 'package:background_location/notification.dart' as notif;

const fetchBackground = "fetchBackground";
/*
void callbackDispatcher() {
  Workmanager.executeTask((task, inputData) async {
    switch (task) {
      case fetchBackground:
        //Geolocator geoLocator = Geolocator()..forceAndroidLocationManager = true;
        Position userLocation = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
        notif.Notification notification = new notif.Notification();
        notification.showNotificationWithoutSound(userLocation);
        break;
    }
    return Future.value(true);
  });
}


 */
void callbackDispatcher() {
  Workmanager.executeTask((task, inputData) async{
    switch (task) {
      case Workmanager.iOSBackgroundTask:
        stderr.writeln("The iOS background fetch was triggered");
        Position userLocation = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
        notif.Notification notification = new notif.Notification();
        notification.showNotificationWithoutSound(userLocation);
        break;

    }
    bool success = true;
    return Future.value(success);
  });
}

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(

        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {

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

    // We don't need it anymore since it will be executed in background
    //this._getUserPosition();

    Workmanager.initialize(
      callbackDispatcher,
      isInDebugMode: true,
    );

  //  Workmanager.iOSBackgroundTask;

   // Workmanager.registerPeriodicTask(
    //    //   "1",
    //     //  fetchBackground,
    //    //   frequency: Duration(minutes: 30),
    //     //);

 //   callbackDispatcher();


  }


  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              "",
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
    );
  }
}

باقي الخطوات انا متبع شرح تنصيب الاضافة على  ios 

https://github.com/fluttercommunity/flutter_workmanager/blob/master/IOS_SETUP.md

ياليت الي معه فكره ب هذا المشاكل يفيدنا ولكم جزيل الشكر  

 

Recommended Posts

لا توجد أي إجابات على هذا السؤال بعد

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...