Rat*_*rty 10 android ios dart flutter
我flutter_local_notifications第一次在项目中使用包。
遵循pub.dev站点文档中给出的代码。但问题是当我按下应该触发通知的按钮时,它会导致PlatformException错误。
错误
E/flutter (15180): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: PlatformException(error, Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference, null)
E/flutter (15180): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter (15180): #1      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:318:33)
E/flutter (15180): <asynchronous suspension>
E/flutter (15180): #2      FlutterLocalNotificationsPlugin.show (package:flutter_local_notifications/src/flutter_local_notifications.dart:120:20)
E/flutter (15180): <asynchronous suspension>
E/flutter (15180): #3      _NewsfeedState.showNotification (package:news_app/screens/newsfeed_screen.dart:129:43)
代码如下。
初始化状态()
  @override
  void initState() {
   super.initState();
    var android = AndroidInitializationSettings('mipmap-hdpi/ic_launcher.png');
    var ios = IOSInitializationSettings();
    var initSettings = InitializationSettings(android, ios);
    flutterLocalNotificationsPlugin.initialize(initSettings, onSelectNotification: onSelectNotification);
}
onSelectNotification():按下通知时显示一个对话框。
Future onSelectNotification(String payload) {
    showDialog(context: context, builder: (_) => AlertDialog(
      title: Text("Notfication"),
      content: Text("This is notification"),
    ));
  }
主要小部件:Press作为测试目的,我使用此按钮检查通知是否有效。
  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        RaisedButton(
          onPressed: showNotification,
          child: Text(
              "Press"
          ),
        ),
      ],
    );
  }
显示通知()
showNotification() async {
    var android = AndroidNotificationDetails(
        'channel id',
        'channel NAME',
        'CHANNEL DESCRIPTION',
        importance: Importance.Max,
        priority: Priority.High,
        ticker: 'ticker'
    );
    var ios = IOSNotificationDetails();
    var platform = NotificationDetails(android, ios);
    await flutterLocalNotificationsPlugin.show(0, "New Notification", "I'm notification", 
    platform, payload: "It works");
  }
还有一个问题,我发现这个错误,但它提供了解决方案是没有用的,我的。
我尝试flutter_local_notifications了几次更改软件包的版本,但没有成功。
然后追溯错误中显示的文件,以查看究竟是什么导致了null值。
在文件中platform_channel.dart,invokeMethod<T>(String method, [dynamic arguments])我尝试打印method并arguments查看结果是什么null。这个方法是从 调用的flutter_local_notifications.dart。
invokeMethod(String method, [动态参数])
 @optionalTypeArgs
  Future<T> invokeMethod<T>(String method, [ dynamic arguments ]) async {
    assert(method != null);
    final ByteData result = await binaryMessenger.send(
      name,
      codec.encodeMethodCall(MethodCall(method, arguments)),
    );
    print(arguments);  
    print(method); 
    if(result == null) {
      throw MissingPluginException('No implementation found for method $method on channel 
      $name');
    }
    final T typedResult = codec.decodeEnvelope(result);
    return typedResult;
  }
参数的输出是,
I/flutter (15180): {id: 0, title: New News!, body: I'm news., platformSpecifics: {icon: null, channelId: channel id, channelName: channel NAME, channelDescription: CHANNEL DESCRIPTION, channelShowBadge: true, channelAction: 0, importance: 5, priority: 1, playSound: true, sound: null, enableVibration: true, vibrationPattern: null, style: 0, styleInformation: {htmlFormatContent: false, htmlFormatTitle: false}, groupKey: null, setAsGroupSummary: null, groupAlertBehavior: 0, autoCancel: true, ongoing: null, colorAlpha: null, colorRed: null, colorGreen: null, colorBlue: null, largeIcon: null, largeIconBitmapSource: null, onlyAlertOnce: null, showProgress: false, maxProgress: 0, progress: 0, indeterminate: false, enableLights: false, ledColorAlpha: null, ledColorRed: null, ledColorGreen: null, ledColorBlue: null, ledOnMs: null, ledOffMs: null, ticker: ticker}, payload: I'm the one}
你可以看到title,body,channel id,channel NAME这些都是我给的人,但也有许多其他字段其null。我猜这些会导致错误,但不确定。
当我按照文档进行操作时,我没有看到有关此类字段的任何说明。
一些线索将意味着很大的帮助。非常感谢您的时间。
来自插件的自述文件:
app_icon 需要作为可绘制资源添加到 Android head 项目中
因此,将您的放入app_icon文件drawable夹而不是mipmap,并将代码更改为:
var android = AndroidInitializationSettings('app_icon');
| 归档时间: | 
 | 
| 查看次数: | 3000 次 | 
| 最近记录: |