1.0.3 • Published 4 years ago

react-native-lantern v1.0.3

Weekly downloads
2
License
MIT
Repository
github
Last release
4 years ago

react-native-lantern

Flashlight support on React Native

Warning!!! Support only Android (>= API 23 (>= Android 6.0))

Getting started

npm i react-native-lantern

Automatic installation

npx react-native link react-native-lantern (use npx react-native unlink react-native-lantern to uninstall)

Manual installation

Android

  1. Open up android/app/src/main/java/[...]/MainApplication.java
  • Add import com.reactnative.lantern.ReactNativeLanternPackage; to the imports at the top of the file
  1. Append the following lines to android/settings.gradle:
    include ':react-native-lantern'
    project(':react-native-lantern').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-lantern/android')
  2. Insert the following lines inside the dependencies block in android/app/build.gradle:
    compile project(':react-native-lantern')

Usage

import React, { useState, useEffect, useCallback } from 'react';
import { View, Button } from 'react-native';
import lantern from 'react-native-lantern';

const Main = () => {
    const [isDisabled, setDisabled] = useState(true);
    const [isTurnOn, setTurnState] = useState(false);

    useEffect(() => {
        // call on change turn state (fire on subscribe, return current turn state)
        const unsubscribe = lantern.subscribe('onTurn', (event) => setTurnState(event.value));
        return unsubscribe;
    }, []);

    useEffect(() => {
        (async () => {
            // initialize module
            await lantern.ready();
            setDisabled(false);
        })();
    }, []);

    const onPress = useCallback(async () => {
        if (isTurnOn) {
            await lantern.turnOff();
        } else {
            await lantern.turnOn();
        }
        // or `await lantern.turn(!isTurnOn)`
    }, [isTurnOn]);

    return (
        <View>
            <Button title={isTurnOn ? 'Off' : 'On'} onPress={onPress} disabled={isDisabled} />
        </View>
    );
}

API

ready() -> Promise

Initialize flashlight. This method should be called at the very beginning, before calling other methods.

turn(turnState) -> Promise

Change turn (on/off).

turnOn() -> Promise

Turn on flashlight.

turnOff() -> Promise

Turn off flashlight.

subscribe(eventName, callback) -> unsubscribe

Subscribing to event. Use the onTurn event to subscribe to a state change turnState.

FAQ

When running Jest tests, an error occurs react-native-lantern: NativeModule.ReactNativeLantern is null.

This is due to the fact that when running Jest tests, there is no native implementation of the module. You need to add a mock file:

// __mocks__/react-native-lantern.ts
const lanternMockModule = {
  ready: jest.fn(() => Promise.resolve()),
  turn: jest.fn(() => Promise.resolve()),
  turnOn: jest.fn(() => Promise.resolve()),
  turnOff: jest.fn(() => Promise.resolve()),
  subscribe: jest.fn(() => () => {}),
};

export default lanternMockModule;

License

MIT

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago

0.1.0-beta.25

4 years ago

0.1.0-beta.10

4 years ago

0.1.0-beta.12

4 years ago

0.1.0-beta.11

4 years ago

0.1.0-beta.18

4 years ago

0.1.0-beta.17

4 years ago

0.1.0-beta.19

4 years ago

0.1.0-beta.14

4 years ago

0.1.0-beta.7

4 years ago

0.1.0-beta.13

4 years ago

0.1.0-beta.16

4 years ago

0.1.0-beta.9

4 years ago

0.1.0-beta.15

4 years ago

0.1.0-beta.8

4 years ago

0.1.0-beta.21

4 years ago

0.1.0-beta.20

4 years ago

0.1.0-beta.23

4 years ago

0.1.0-beta.22

4 years ago

0.1.0-beta.24

4 years ago

0.1.0-beta.6

4 years ago

0.1.0-beta.5

4 years ago

0.1.0-beta.4

4 years ago

0.1.0-beta.3

4 years ago

0.1.0-beta.2

4 years ago

0.1.0-beta.1

4 years ago

0.1.0-beta.0

4 years ago