Anonymous
Экземпляр поставщика, похоже, был неправильно принят в методе MethodChannel.setMethodCallHandler.
Сообщение
Anonymous » 10 май 2024, 05:54
Код: Выделить всё
class MainActivity : FlutterActivity() {
private final val CHANNEL = "com.example/mediaControl";
private lateinit var flutterEngine: FlutterEngine;
lateinit var channel:MethodChannel;
private fun sendKeyCodeToFlutter(keyCode: String) {
channel.invokeMethod(
"sendKeyCode",
keyCode
)
}
override fun onCreate(savedInstanceState: Bundle?) {
flutterEngine = FlutterEngine(this);
flutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault());
channel = MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL);
Handler().postDelayed({
sendKeyCodeToFlutter("countAdd");
}, 3000)
super.onCreate(savedInstanceState)
}
}
Код: Выделить всё
void main() {
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => Counter()),
],
child: const MyApp(),
),
);
}
class Counter with ChangeNotifier, DiagnosticableTreeMixin {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State createState() => _MyHomePageState();
}
class _MyHomePageState extends State {
@override
void initState() {
super.initState();
var _context = context;
const MethodChannel _channel = MethodChannel('com.example/mediaControl');
_channel.setMethodCallHandler((call) async {
switch (call.method) {
case 'sendKeyCode':
if (call.arguments == 'countAdd') {
Provider.of(context, listen: false).increment();
print('receive: countAdd');
print('receive: ${Provider.of(context, listen: false).count}');
}
break;
default:
throw UnimplementedError();
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('${context.watch().count}')
],
),
)
);
}
}
Я хочу отправить сообщение на сторону Flutter через Android, чтобы вызвать определенную функцию экземпляра провайдера на стороне Flutter. В результате его можно запустить, но похоже, что экземпляр получен неправильно, и счетчик на странице не обновился.
Хочу отправить сообщение во Flutter через Android, чтобы вызвать определенную функцию экземпляра провайдера на стороне Flutter. В результате его можно запустить, но похоже, что экземпляр получен неправильно, и счетчик на странице не обновился
Подробнее здесь:
https://stackoverflow.com/questions/784 ... annel-setm
1715309698
Anonymous
[code]class MainActivity : FlutterActivity() { private final val CHANNEL = "com.example/mediaControl"; private lateinit var flutterEngine: FlutterEngine; lateinit var channel:MethodChannel; private fun sendKeyCodeToFlutter(keyCode: String) { channel.invokeMethod( "sendKeyCode", keyCode ) } override fun onCreate(savedInstanceState: Bundle?) { flutterEngine = FlutterEngine(this); flutterEngine.getDartExecutor().executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault()); channel = MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL); Handler().postDelayed({ sendKeyCodeToFlutter("countAdd"); }, 3000) super.onCreate(savedInstanceState) } } [/code] [code]void main() { runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (_) => Counter()), ], child: const MyApp(), ), ); } class Counter with ChangeNotifier, DiagnosticableTreeMixin { int _count = 0; int get count => _count; void increment() { _count++; notifyListeners(); } } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { @override void initState() { super.initState(); var _context = context; const MethodChannel _channel = MethodChannel('com.example/mediaControl'); _channel.setMethodCallHandler((call) async { switch (call.method) { case 'sendKeyCode': if (call.arguments == 'countAdd') { Provider.of(context, listen: false).increment(); print('receive: countAdd'); print('receive: ${Provider.of(context, listen: false).count}'); } break; default: throw UnimplementedError(); } }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ), body: Center( child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ Text('${context.watch().count}') ], ), ) ); } } [/code] Я хочу отправить сообщение на сторону Flutter через Android, чтобы вызвать определенную функцию экземпляра провайдера на стороне Flutter. В результате его можно запустить, но похоже, что экземпляр получен неправильно, и счетчик на странице не обновился. Хочу отправить сообщение во Flutter через Android, чтобы вызвать определенную функцию экземпляра провайдера на стороне Flutter. В результате его можно запустить, но похоже, что экземпляр получен неправильно, и счетчик на странице не обновился Подробнее здесь: [url]https://stackoverflow.com/questions/78457795/the-provider-instance-seems-to-have-been-taken-incorrectly-in-methodchannel-setm[/url]