Интеграция Flushbar с WorkManager в Flutter - PullRequest
0 голосов
/ 29 апреля 2020

Я довольно новичок, чтобы трепетать и медленно выяснять свой выход. Мое приложение таково, что в нем есть страница обратного отсчета. Когда обратный отсчет достигает значения «0», он должен отображать панель сброса, даже если приложение не работает в фоновом режиме. Вот код ниже:

Я вставил функцию callbackDispatcher () и Initialise из workManager как таковую для фона, но это дает уведомление (что мне не нравится), но я хотите грипп sh bar. Детали flushbar можно найти здесь: https://pub.dev/packages/workmanager# -readme-tab- .

Я поставил код здесь. Я просто не знаю, что делать

import 'package:flutter/material.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:intl/intl.dart';
import 'package:flushbar/flushbar.dart';
import 'fileUtils.dart';
import 'package:workmanager/workmanager.dart';



void callbackDispatcher() {
print("Ran backGround");
}

class CountdownTimer extends StatefulWidget {
  static const routeName='/countdowntimer';

  @override
  _CountdownTimerState createState() => _CountdownTimerState();


}

class _CountdownTimerState extends State<CountdownTimer> {

  String mm="00";
  String ss="00";
  var mmValue;
  var ssValue;
  var totalTimeInSec;
  Flushbar flush;
  String _selectedTime;

  @override
  void initState(){
    super.initState();
    FileUtils().readFromFile().then((String value){
      setState(() {
        _selectedTime=value;
      });
    });
  }



  // ignore: non_constant_identifier_names
  void display_flush_bar() {
    Future.delayed(Duration(seconds: totalTimeInSec), () {
      setState(() {
        flush = Flushbar<bool>(
          title: "Hey",
          message: "XXXXXXXXXXXXXX"  //a custome message as the user input will be written here
          duration: Duration(seconds: 5),
          isDismissible: true,

          icon: Icon(
            Icons.warning,
            color: Colors.red,
          ),
          dismissDirection: FlushbarDismissDirection
              .HORIZONTAL,


          mainButton: FlatButton(
            onPressed: () {
              flush.dismiss(true);
            },
            child: Text(
              "CANCEL",
              style: TextStyle(color: Colors.amber),
            ),
          ),
        )
          ..show(context);
      });
    });
  }

   @override
  Widget build(BuildContext context) {

    return Scaffold(
        body: Column(
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.fromLTRB(30, 70, 0, 0),
              child: Text("Timer for Notification",
                style: TextStyle(
                  fontSize: 50,
                ),
              ),
            ),
            Padding(
              padding: const EdgeInsets.fromLTRB(0, 150, 0, 0),
              child: Text("MM-SS",
                style: TextStyle(
                  fontSize: 30,
                  fontWeight: FontWeight.bold,
                ),),
            ),
            Padding(
              padding: const EdgeInsets.fromLTRB(0, 0, 0, 0),
              child:
              Text("${_selectedTime??'Selected Time'}",style: TextStyle(fontWeight: 
                  FontWeight.bold,fontSize: 38),),


            ),

            RaisedButton(

              onPressed: () {
                DatePicker.showPicker(context,
                    showTitleActions: true,
                    pickerModel: CustomPicker(currentTime: DateTime.tryParse(_selectedTime)),

                    onConfirm: (time) {
                      setState(() {
                         print(time);
                         _selectedTime = DateFormat("mm-ss").format(time);
                         FileUtils().saveToFile(_selectedTime);


                        mm=_selectedTime.substring(0,2);
                        ss=_selectedTime.substring(3,5);
                        print(mm );
                        print(ss);
                        mmValue=int.parse(mm);
                        ssValue=int.parse(ss);
                        totalTimeInSec=mmValue*60+ssValue;
                        print(totalTimeInSec);



                       //IT IS HERE I WANT THE WORKFLOW MANAGER CODE TO APPEAR TO DISPLAY A FLUSHBAR

                       //THE BELOW CODE KIND OF GIVES A NOTIFICATION WHICH I WANT AS TO BE DISPLAYED  
                       //AS A FLUSHBAR

                         if(totalTimeInSec!=0)
                        {
                          Workmanager.initialize(
                              callbackDispatcher, // The top level function, aka callbackDispatcher
                              isInDebugMode: true,// If enabled it will post a notification whenever 
                                                 //the task is running. Handy for debugging tasks
                          );

                          Workmanager.registerPeriodicTask(
                              "2",
                              "simplePeriodicTask",
                              initialDelay: Duration(seconds: totalTimeInSec),
                              // When no frequency is provided the default 15 minutes is set.
                              // Minimum frequency is 15 min. Android will automatically change your 
                              //frequency to 15 min if you have configured a lower frequency.
                              frequency: Duration(seconds: totalTimeInSec),
                        );
}


                        });

                    },
                    locale: LocaleType.en);

              },
              child: Text("Show Time picker"),

            ),





          ],
        )





    );
  }
}
...