Уведомление на языке DART — html/browser/webkit/Desktop

Я хочу спросить об обычном уведомлении в DART, которое отличается от обсуждаемого упакованного приложения Chrome здесь

Я создал приведенный ниже код, браузер [DARTIUM] запросил разрешение, как и ожидалось, но ответ в обоих случаях (Разрешить/Запретить) появился в консоли как «по умолчанию», а уведомление не появилось.

{

 void main() {
    Notification.requestPermission().then((String permission) {
     print(permission);   // ==> This is always = "default" for both Allow and Deny
   if (permission == "default") {
       print('permission granted');
       var notification = new Notification('hello');
     }
 else print('sorry no permission!');
}); 
}

любая мысль! Спасибо


person Hasan A Yousef    schedule 01.09.2014    source источник


Ответы (2)


Код в том виде, в котором он написан в настоящее время, никогда не будет отображать разрешение в любом случае — «по умолчанию» означает, что разрешение не было разрешено или отклонено. Вы должны проверить наличие permission == "granted" перед отображением уведомления.

Имейте в виду, что существует нерешенная ошибка с уведомлениями и проверкой текущих разрешений, см. https://code.google.com/p/dart/issues/detail?id=20585, хотя вас это может не касаться.

person w.brian    schedule 02.09.2014
comment
что бы я ни нажимал, он показывает результат по умолчанию, поэтому if (...) будет иметь разрешение либо по умолчанию, либо! по умолчанию - person Hasan A Yousef; 02.09.2014
comment
Можете ли вы опубликовать более полный пример вашего кода? - person w.brian; 02.09.2014
comment
в действительности нет ничего особенного, код, который я пытаюсь, - это просто дать уведомление после его запуска, я немного настроил формулировку вопроса, спасибо - person Hasan A Yousef; 05.09.2014
comment
Ха, странно. Первоначально Гюнтер опубликовал ответ, в котором говорилось, что уведомление должно запускаться пользовательским событием, и это правда. По моему опыту работы с этим, у вас даже не будет запрашиваться разрешение браузером, если уведомление не запрашивает разрешение в результате пользовательского события. Итак, если вы поместите этот код в обработчик нажатия кнопки, он должен работать. - person w.brian; 05.09.2014

спасибо, Брайан и Гюнтер, я сделал собственное уведомление, вдохновленное этим

Я использовал тот же файл CSS и создал пользовательский элемент, уведомление.

part of myApp;

class NotificationElement extends HtmlElement {
// Define the custom element tag
static final tag = 'x-Notification';   
factory NotificationElement() => new Element.tag(tag); 
// Create the element and define its stylesheet

NotificationElement.created() : super.created(){
     LinkElement styleSheet = new LinkElement()..rel = "stylesheet"..type="text/css"..href="./style/toastr.css";
      document.head.append(styleSheet);
  }

var notificationContainer = new Element.html('<div></div>')
                          ..id='notification-container';
var notificationBody = new Element.html('<div></div>')
                    ..classes.add('notification');
var notificationButton = new ButtonElement()
                    ..classes.add('notification-close-button')
                    ..text='x';

var notificationTitle = new Element.html('<div></div>')..classes.add('notification-title');
var notificationMsg = new Element.html('<div></div>')..classes.add('notification-message');
var notificationMsgLabel = new LabelElement();

Element launchElement(type,location,Title,Msg){
notificationButton.onClick.listen((e) => notificationContainer.nodes.remove(notificationBody));
notificationContainer..classes.add('notification-'+location);
notificationBody..classes.add('notification-'+type);
notificationTitle.text=Title;
notificationMsg.innerHtml='<label>'+Msg+'</label>';
       notificationBody.nodes..add(notificationButton)..add(notificationTitle)..add(notificationMsg);                        
notificationContainer.nodes..add(notificationBody);
return (notificationContainer);  
} 

}

Element mynotification = querySelector('#notification-element');

void CreatefonixNotification(type,location,Title,Msg){
    var notifyMe = new Element.tag('x-notification');
    notifyMe = notifyMe.launchElement(type,location,Title,Msg);
    mynotification.nodes.add(notifyMe);
}

в index.dart я зарегистрировал элемент:

document.registerElement(NotificationElement.tag, NotificationElement);

и в index.html я добавил этот div:

<div id='notification-element'></div>

и любое место в приложении я могу назвать так:

CreateNotification('error','top-left','Error:','sorry we have some issue!!.')
person Hasan A Yousef    schedule 05.09.2014