Giter Club home page Giter Club logo

Comments (8)

lijy91 avatar lijy91 commented on July 19, 2024 1
  1. I reconfirmed that it works on main, but I need to add WidgetsFlutterBinding.ensureInitialized()
  2. For hot reload, HotKeyManager.instance.unregisterAll() needs to be called;
  3. No element error is fixed on macOS platform , Windows and Linux platform will fixed later.
void main() {
+  WidgetsFlutterBinding.ensureInitialized();

  final _hotkey = HotKey(
    KeyCode.keyF,
    modifiers: [KeyModifier.alt],
  );

+  HotKeyManager.instance.unregisterAll();
  HotKeyManager.instance.register(
    _hotkey,
    keyDownHandler: (hotKey) => print('keyDown'),
    keyUpHandler: (hotKey) => print('keyUp'),
  );

  runApp(MyApp());
}

from hotkey_manager.

Merrit avatar Merrit commented on July 19, 2024 1

New version seems to be working good in my brief testing. Thanks!

Love that you've made it feel simple and seamless, great work ❤️

from hotkey_manager.

lijy91 avatar lijy91 commented on July 19, 2024

On linux platform it depends on keybinder-3.0, You need to install it.

sudo apt-get install keybinder-3.0

from hotkey_manager.

Merrit avatar Merrit commented on July 19, 2024

Thanks! On Ubuntu-based distros this is:

sudo apt install libkeybinder-3.0-dev

Now it compiles correctly. 👍

On run however it throws an exception at instance.register():

  final _hotkey = HotKey(
    KeyCode.f6,
    modifiers: [KeyModifier.control, KeyModifier.shift],
  );

  await HotKeyManager.instance.register(
    _hotkey,
    keyDownHandler: (hotKey) {
      print('keyDown');
    },
    keyUpHandler: (hotKey) {
      print('keyUp');
    },
  );

_CastError (Null check operator used on a null value)

#0 MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:121:86)
#1 MethodChannel.setMethodCallHandler (package:flutter/src/services/platform_channel.dart:375:5)
#2 HotKeyManager._init (package:hotkey_manager/src/hotkey_manager.dart:28:14)
#3 HotKeyManager.register (package:hotkey_manager/src/hotkey_manager.dart:85:24)
#4 main (package:flutter_hotkey_demo/main.dart:12:32)
#5 _runMainZoned.. (dart:ui/hooks.dart:145:25)
#6 _rootRun (dart:async/zone.dart:1428:13)
#7 _CustomZone.run (dart:async/zone.dart:1328:19)
#8 _runZoned (dart:async/zone.dart:1863:10)
#9 runZonedGuarded (dart:async/zone.dart:1851:12)
#10 _runMainZoned. (dart:ui/hooks.dart:141:5)
#11 _delayEntrypointInvocation. (dart:isolate-patch/isolate_patch.dart:283:19)
#12 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)

from hotkey_manager.

lijy91 avatar lijy91 commented on July 19, 2024

Can you provide the code for flutter_hotkey_demo

from hotkey_manager.

lijy91 avatar lijy91 commented on July 19, 2024

Please don't use it in main function.

from hotkey_manager.

Merrit avatar Merrit commented on July 19, 2024

Alright, tried moving it out of main and it works some of the time. (Where do you recommend to initialize?)

"some of the time" because when it doesn't work; after hot reload I have seen it:

  1. Fire the call back 3 times per press of the hotkey
  2. Trigger an exception:

"No element"

Stacktrace:

#0 ListMixin.firstWhere (dart:collection/list.dart:167:5)
#1 HotKeyManager._methodCallHandler (package:hotkey_manager/src/hotkey_manager.dart:62:33)
#2 MethodChannel._handleAsMethodCall (package:flutter/src/services/platform_channel.dart:386:55)
#3 MethodChannel.setMethodCallHandler. (package:flutter/src/services/platform_channel.dart:379:34)
#4 _DefaultBinaryMessenger.setMessageHandler. (package:flutter/src/services/binding.dart:379:35)
#5 _DefaultBinaryMessenger.setMessageHandler. (package:flutter/src/services/binding.dart:376:46)
#6 _invoke2. (dart:ui/hooks.dart:205:15)
#7 _rootRun (dart:async/zone.dart:1428:13)
#8 _CustomZone.run (dart:async/zone.dart:1328:19)
#9 _CustomZone.runGuarded (dart:async/zone.dart:1236:7)
#10 _invoke2 (dart:ui/hooks.dart:204:10)
#11 _ChannelCallbackRecord.invoke (dart:ui/channel_buffers.dart:42:5)
#12 _Channel.push (dart:ui/channel_buffers.dart:132:31)
#13 ChannelBuffers.push (dart:ui/channel_buffers.dart:329:17)
#14 PlatformDispatcher._dispatchPlatformMessage (dart:ui/platform_dispatcher.dart:544:22)
#15 _dispatchPlatformMessage (dart:ui/hooks.dart:92:31)

Code is just from a new flutter project:

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:hotkey_manager/hotkey_manager.dart';

Future<void> main() async {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(),
      home: const HomePage(),
    );
  }
}

Future<void> startHotkey() async {
  final _hotkey = HotKey(
    KeyCode.f6,
    modifiers: [KeyModifier.control, KeyModifier.shift],
  );

  await HotKeyManager.instance.register(
    _hotkey,
    keyDownHandler: (hotKey) => log('keyDown'),
    keyUpHandler: (hotKey) => log('keyUp'),
  );
}

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  void initState() {
    super.initState();
    startHotkey();
  }

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body: Center(
        child: Text('Hotkey test'),
      ),
    );
  }
}

By the way, is there a specific reason this requires Flutter, and doesn't support a dart application? I could see it being very useful for that use case as well.

from hotkey_manager.

lijy91 avatar lijy91 commented on July 19, 2024

Please upgrade to 0.1.0

dependencies:
  hotkey_manager: ^0.1.0

from hotkey_manager.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.