Я пытаюсь отправить сообщение через IsolateNameServer во флаттере.
Однако я не могу получать сообщения. Я попытался проверить, прослушивает ли порт приемника, дважды позвонив port.listen()
, и он говорит, что он уже прослушивает.
Где я ошибаюсь? [Я внимательно слежу за этой документацией ]
Вот мой main.dart, основанный на приведенном выше do c:
import 'dart:isolate';
import 'dart:math';
import 'dart:ui';
import 'package:android_alarm_manager/android_alarm_manager.dart';
import 'package:flutter/material.dart';
final ReceivePort port = ReceivePort();
const String isolateName = 'isolate';
main() async {
WidgetsFlutterBinding.ensureInitialized();
IsolateNameServer.registerPortWithName(
port.sendPort,
isolateName,
);
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,
accentColor: Colors.pink,
floatingActionButtonTheme:
FloatingActionButtonThemeData(backgroundColor: Colors.pink)),
home: AlarmManagerExample());
}
}
class AlarmManagerExample extends StatefulWidget {
@override
_AlarmManagerExampleState createState() => _AlarmManagerExampleState();
}
class _AlarmManagerExampleState extends State<AlarmManagerExample> {
@override
void initState() {
super.initState();
AndroidAlarmManager.initialize();
port.listen((_) async => await workForMe());
}
workForMe() async {
print("Secondary Function Triggered!");
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Container(
child: RaisedButton(
onPressed: () async {
await AndroidAlarmManager.oneShot(const Duration(seconds: 5),
Random().nextInt(pow(2, 21)), callback);
},
child: Text(
"Alarm Manager",
),
),
),
);
}
static SendPort uiSendPort;
static callback() {
print("Callbacks Triggered!");
// This will be null if we're running in the background.
uiSendPort ??= IsolateNameServer.lookupPortByName(isolateName);
uiSendPort?.send(null);
}
}
Результат, который я получаю это:
Callbacks Triggered!
Однако ожидаемый результат:
Callbacks Triggered!
Secondary Function Triggered!