Я довольно новичок, чтобы трепетать и медленно выяснять свой выход. Мое приложение таково, что в нем есть страница обратного отсчета. Когда обратный отсчет достигает значения «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"),
),
],
)
);
}
}