如何解决颤动闹钟没有声音
该应用程序运行良好,但我遇到了一些问题:
1-我收到通知但我没有从通知中得到任何声音,我不知道这是否是 Flutter_local_notifications 依赖问题,因为当我尝试将其更新到最新版本时,我在主页上遇到了一些错误和报警页面
2-我无法访问这些选项(重复、声音、标题):
https://i.ibb.co/4fj7x16/s3.png
这里是报警页面:
import 'package:clock_app/alarm_helper.dart';
import 'package:clock_app/constants/theme_data.dart';
import 'package:clock_app/data.dart';
import 'package:clock_app/models/alarm_info.dart';
import 'package:dotted_border/dotted_border.dart';
import 'package:Flutter/material.dart';
import 'package:Flutter_local_notifications/Flutter_local_notifications.dart';
import 'package:intl/intl.dart';
import '../main.dart';
class AlarmPage extends StatefulWidget {
@override
_AlarmPageState createState() => _AlarmPageState();
}
class _AlarmPageState extends State<AlarmPage> {
DateTime _alarmTime;
String _alarmTimeString;
AlarmHelper _alarmHelper = AlarmHelper();
Future<List<AlarmInfo>> _alarms;
@override
void initState() {
_alarmTime = DateTime.Now();
_alarmHelper.initializeDatabase().then((value) {
print('------database intialized');
loadAlarms();
});
super.initState();
}
void loadAlarms() {
_alarms = _alarmHelper.getAlarms();
if (mounted) setState(() {});
}
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.symmetric(horizontal: 32,vertical: 64),child: Column(
crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
Text(
'Alarm',style: TextStyle(
fontFamily: 'avenir',fontWeight: FontWeight.w700,color: CustomColors.primaryTextColor,fontSize: 24),),Expanded(
child: FutureBuilder<List<AlarmInfo>>(
future: _alarms,builder: (context,snapshot) {
if (snapshot.hasData)
return ListView(
children: snapshot.data.map<Widget>((alarm) {
var alarmTime =
DateFormat('hh:mm aa').format(alarm.alarmDateTime);
var gradientColor = GradientTemplate
.gradientTemplate[alarm.gradientColorIndex].colors;
return Container(
margin: const EdgeInsets.only(bottom: 32),padding: const EdgeInsets.symmetric(
horizontal: 16,vertical: 8),decoration: Boxdecoration(
gradient: LinearGradient(
colors: gradientColor,begin: Alignment.centerLeft,end: Alignment.centerRight,BoxShadow: [
BoxShadow(
color: gradientColor.last.withOpacity(0.4),blurRadius: 8,spreadRadius: 2,offset: Offset(4,4),],borderRadius: BorderRadius.all(Radius.circular(24)),child: Column(
crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Row(
children: <Widget>[
Icon(
Icons.label,color: Colors.white,size: 24,SizedBox(width: 8),Text(
alarm.title,style: TextStyle(
color: Colors.white,fontFamily: 'avenir'),Switch(
onChanged: (bool value) {},value: true,activeColor: Colors.white,Text(
'Mon-Fri',style: TextStyle(
color: Colors.white,Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Text(
alarmTime,style: TextStyle(
color: Colors.white,fontFamily: 'avenir',fontSize: 24,fontWeight: FontWeight.w700),IconButton(
icon: Icon(Icons.delete),onpressed: () {
_alarmHelper.delete(alarm.id);
},);
}).followedBy([
if (alarms.length < 5)
DottedBorder(
strokeWidth: 2,color: CustomColors.clockOutline,borderType: BorderType.RRect,radius: Radius.circular(24),dashPattern: [5,4],child: Container(
width: double.infinity,decoration: Boxdecoration(
color: CustomColors.clockBG,borderRadius:
BorderRadius.all(Radius.circular(24)),child: FlatButton(
padding: const EdgeInsets.symmetric(
horizontal: 32,vertical: 16),onpressed: () {
_alarmTimeString =
DateFormat('HH:mm').format(DateTime.Now());
showModalBottomSheet(
useRootNavigator: true,context: context,clipBehavior: Clip.antiAlias,shape: RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(24),builder: (context) {
return StatefulBuilder(
builder: (context,setModalState) {
return Container(
padding: const EdgeInsets.all(32),child: Column(
children: [
FlatButton(
onpressed: () async {
var selectedTime =
await showTimePicker(
context: context,initialTime:
TimeOfDay.Now(),);
if (selectedTime != null) {
final Now = DateTime.Now();
var selectedDateTime =
DateTime(
Now.year,Now.month,Now.day,selectedTime.hour,selectedTime
.minute);
_alarmTime =
selectedDateTime;
setModalState(() {
_alarmTimeString =
selectedTime
.toString();
});
}
},child: Text(
_alarmTimeString,style:
TextStyle(fontSize: 32),ListTile(
title: Text('Repeat'),trailing: Icon(
Icons.arrow_forward_ios),ListTile(
title: Text('Sound'),ListTile(
title: Text('Title'),FloatingActionButton.extended(
onpressed: () async {
DateTime
scheduleAlarmDateTime;
if (_alarmTime
.isAfter(DateTime.Now()))
scheduleAlarmDateTime =
_alarmTime;
else
scheduleAlarmDateTime =
_alarmTime.add(
Duration(days: 1));
var alarmInfo = AlarmInfo(
alarmDateTime:
scheduleAlarmDateTime,gradientColorIndex:
alarms.length,title: 'alarm',);
_alarmHelper
.insertAlarm(alarmInfo);
scheduleAlarm(
scheduleAlarmDateTime);
},icon: Icon(Icons.alarm),label: Text('Save'),);
},);
},);
// scheduleAlarm();
},child: Column(
children: <Widget>[
Image.asset(
'assets/add_alarm.png',scale: 1.5,SizedBox(height: 8),Text(
'Add Alarm',style: TextStyle(
color: Colors.white,)
else
Text('Only 5 alarms allowed!'),]).toList(),);
return Center(
child: Text(
'Loading..',style: TextStyle(color: Colors.white),);
},);
}
void scheduleAlarm(DateTime schedulednotificationDateTime) async {
var androidplatformChannelSpecifics = AndroidNotificationDetails(
'alarm_notif','alarm_notif','Channel for Alarm notification',icon: 'logo',sound: RawResourceAndroidNotificationSound('a_long_cold_sting'),largeIcon: DrawableResourceAndroidBitmap('logo'),);
var iOSPlatformChannelSpecifics = IOSNotificationDetails(
sound: 'a_long_cold_sting.wav',presentAlert: true,presentBadge: true,presentSound: true);
var platformChannelSpecifics = NotificationDetails(
androidplatformChannelSpecifics,iOSPlatformChannelSpecifics);
await FlutterlocalnotificationsPlugin.schedule(
0,'Office','Good morning! Time for office.',schedulednotificationDateTime,platformChannelSpecifics);
}
}
这里是主页:
import 'package:clock_app/enums.dart';
import 'package:clock_app/models/menu_info.dart';
import 'package:Flutter/material.dart';
import 'package:Flutter_local_notifications/Flutter_local_notifications.dart';
import 'package:provider/provider.dart';
import 'views/homepage.dart';
final FlutterlocalnotificationsPlugin FlutterlocalnotificationsPlugin =
FlutterlocalnotificationsPlugin();
void main() async {
WidgetsFlutterBinding.ensureInitialized();
var initializationSettingsAndroid =
AndroidInitializationSettings('logo');
var initializationSettingsIOS = IOSInitializationSettings(
requestAlertPermission: true,requestBadgePermission: true,requestSoundPermission: true,onDidReceivelocalnotification:
(int id,String title,String body,String payload) async {});
var initializationSettings = InitializationSettings(
initializationSettingsAndroid,initializationSettingsIOS);
await FlutterlocalnotificationsPlugin.initialize(initializationSettings,onSelectNotification: (String payload) async {
if (payload != null) {
debugPrint('notification payload: ' + payload);
}
});
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,visualDensity: VisualDensity.adaptivePlatformDensity,home: ChangeNotifierProvider<MenuInfo>(
create: (context) => MenuInfo(MenuType.clock),child: HomePage(),);
}
}
和依赖项:
Flutter_local_notifications: ^1.4.4+2
我仍在学习并遵循教程,所以如果您知道问题是什么以及如何解决它,请向我解释
提前致谢
解决方法
在 Flutter 本地通知中,您可以通过设置额外的标志 4 将闹钟设置为坚持,从而保持闹钟重复直到用户点击它
了解更多详情click here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。