颤动闹钟没有声音

问题描述

我目前正在做一个 Flutter 项目

该应用程序运行良好,但我遇到了一些问题:

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