Библиотека нотификаций для React Native

Внутренние нотификации в iOS или Android достаточно популярное решение во многих приложениях которые позволяют заменить стандартные Alert сообщения. Они используются для отображения какой-то вспомогательной информации для пользователей. Для моих React Native приложений я решил написать свое простое решение на TypeScript и опубликовать библиотеку для всех.


Ознакомится с библиотекой можно по этой ссылке. А далее я расскажу как ей пользоваться.

Для установки библиотеки можно воспользоваться командой в директории с вашим проектом.

yarn add react-native-internal-notification
// или
npm i react-native-internal-notification

Далее нужно обернуть ваш корневой компонент с помощью NotificationProvider который будет управлять отображением нотификаций. Этот компонент использует React Context что бы взаимодействовать с дочерними компонентами.

import { NotificationProvider } from 'react-native-internal-notification';
import App from './App';

const Application = function () {
    return (
        <NotificationProvider>
            <App />
        </NotificationProvider>
    );
};

Теперь в любом вашем дочернем компоненте вы можете вызывать нотификацию которая будет отображена. В примере ниже вам нужно только импортировать функцию useNotification из библиотеки и на любой экшен или изменение состояния вызывать нотификацию.

import React, { useCallback } from 'react';
import { TouchableOpacity, Text } from 'react-native';
import { FontAwesome } from '@expo/vector-icons';

import { useNotification } from 'react-native-internal-notification';

export default function DevScreen() {
    const notification = useNotification();

    const handleNotificationTestClick = useCallback(() => {
        notification.showNotification({
            title: 'My first notification',
            message: 'Hello from my first message',
            icon: <FontAwesome name="check-circle" size={45} />,
            onPress: () => {
                alert('Pressed');
            },
        });
    }, [notification]);

    return (
        <>
            <TouchableOpacity onPress={handleNotificationTestClick}>
                <Text>Show notification</Text>
            </TouchableOpacity>
        </>
    );
}

Компонент поддерживает любые изображения которые вы можете вызвать при вызове. Я использую библиотеку SVG иконок от expo.io.

Пример работы вы можете посмотреть ниже.