Skip to content

Export WakelockPlusPlatformInterface from main package to simplify mocking #132

@rtorrente

Description

@rtorrente

Context

When writing Flutter tests that involve code using wakelock_plus, tests fail with a PlatformException because the native channel is unavailable in the test environment:

PlatformException(channel-error, Unable to establish connection on channel: "dev.flutter.pigeon.wakelock_plus_platform_interface.WakelockPlusApi.toggle"., null, null)

Current workaround

To mock the platform in tests, I currently do the following:

import 'package:mocktail/mocktail.dart';
import 'package:wakelock_plus_platform_interface/wakelock_plus_platform_interface.dart';

class MockWakelockPlusPlatform extends Mock
    implements WakelockPlusPlatformInterface {}

final mockWakelock = MockWakelockPlusPlatform();
wakelockPlusPlatformInstance = mockWakelock;
when(
  () => mockWakelock.toggle(enable: any(named: 'enable')),
).thenAnswer((_) async {});

This requires adding wakelock_plus_platform_interface as a dev_dependency directly, since it's not exported by the main wakelock_plus package.

Note: I may be wrong about the intended mocking approach. If there's an official or recommended way to mock wakelock_plus in tests, I'd be happy to hear it and update my code accordingly. This issue is based on my own exploration.

Problem

Having to depend on wakelock_plus_platform_interface directly as a dev_dependency creates a potential version drift risk: if the platform interface package is updated independently, consumers would need to manually keep both versions in sync, which is error-prone and adds maintenance overhead.

Suggested fix

Re-export WakelockPlusPlatformInterface (or at least the types needed for mocking) from the main wakelock_plus package, so that users only need to depend on wakelock_plus itself, even for testing purposes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions