承接 codingwithrk/double-back-to-close 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

codingwithrk/double-back-to-close

Composer 安装命令:

composer require codingwithrk/double-back-to-close

包简介

A NativePHP Mobile plugin that prompts users to press back twice before exiting the app.

README 文档

README

Latest Version Packagist Downloads License

Image

Prompts users to press the back button twice before the app exits.

On the first back press a native toast is shown ("Press back again to exit"). If the user presses back again within the timeout the app exits. If the timeout elapses the state resets and the next back press starts the cycle over.

Uses nativephp/mobile-dialog as a dependency so you can optionally surface the confirmation message as a rich dialog toast from PHP.

Requirements

Platform Minimum version
Android API 26 (Android 8)
iOS 18.2 (feature is a no-op; iOS has no hardware back button)

Installation

composer require codingwithrk/double-back-to-close

Publish the plugins provider (first time only):

php artisan vendor:publish --tag=nativephp-plugins-provider

Register this plugin (adds the service provider to your NativePluginsServiceProvider):

php artisan native:plugin:register codingwithrk/double-back-to-close

Register the dependency plugin:

php artisan native:plugin:register nativephp/mobile-dialog  

Verify:

php artisan native:plugin:list

PHP Usage

use Codingwithrk\DoubleBackToClose\Facades\DoubleBackToClose;

// Enable with defaults — message: "Press back again to exit", timeout: 2000 ms
DoubleBackToClose::enable();

// Enable with a custom message and timeout
DoubleBackToClose::enable('Tap back again to quit', 3000);

// Update message / timeout while already active
DoubleBackToClose::configure('Press back to exit', 2500);

// Disable (restores default back behaviour)
DoubleBackToClose::disable();

// Show a toast via the mobile-dialog plugin
DoubleBackToClose::showToast('Press back again to exit');

Typical Livewire setup

use Livewire\Component;
use Codingwithrk\DoubleBackToClose\Facades\DoubleBackToClose;

class AppLayout extends Component
{
    public function mount(): void
    {
        DoubleBackToClose::enable();
    }
}

Events

DoubleBackToCloseTriggered

Dispatched on the first back press. The native Android Toast has already been shown; listen to this event if you want to show a dialog toast via mobile-dialog instead.

use Native\Mobile\Attributes\OnNative;
use Codingwithrk\DoubleBackToClose\Events\DoubleBackToCloseTriggered;
use Codingwithrk\DoubleBackToClose\Facades\DoubleBackToClose;

#[OnNative(DoubleBackToCloseTriggered::class)]
public function onFirstBackPress(string $message): void
{
    // Override with a dialog toast
    DoubleBackToClose::showToast($message);
}

Payload

Property Type Description
message string The configured toast message

AppExiting

Dispatched on the second back press, immediately before activity.finish() is called.

use Native\Mobile\Attributes\OnNative;
use Codingwithrk\DoubleBackToClose\Events\AppExiting;

#[OnNative(AppExiting::class)]
public function onAppExiting(): void
{
    // Last-moment cleanup
}

JavaScript Usage

import {DoubleBackToClose, Events} from '@codingwithrk/double-back-to-close';
import {on, off} from '@nativephp/native';

// Enable
await DoubleBackToClose.enable({message: 'Press back again to exit', timeout: 2000});

// Update config
await DoubleBackToClose.configure({message: 'Back again to quit', timeout: 3000});

// Disable
await DoubleBackToClose.disable();

// Listen for first back press
const onTriggered = ({message}) => console.log('First press:', message);
on(Events.DoubleBackToCloseTriggered, onTriggered);

// Listen for exit
const onExiting = () => console.log('Goodbye!');
on(Events.AppExiting, onExiting);

// Tear down
off(Events.DoubleBackToCloseTriggered, onTriggered);
off(Events.AppExiting, onExiting);

How it works

Android

Enable registers an OnBackPressedCallback on the activity's onBackPressedDispatcher.

  • First press: shows a native Toast, dispatches DoubleBackToCloseTriggered, starts a Handler timer for the configured timeout.
  • Second press within timeout: cancels the timer, dispatches AppExiting, calls activity.finish().
  • Timeout elapses: resets backPressedOnce to false; the next press is treated as a first press again.

Disable removes the callback and clears all state.

Configure updates the message/timeout in-place without re-registering the callback.

iOS

iOS does not expose a hardware back button. The bridge functions accept and store configuration, and fire the same PHP events so cross-platform code stays consistent. Pair the feature with DoubleBackToClose::showToast() if you need visual feedback on iOS.

Support

For questions or issues, email connect@codingwithrk.com

License

The MIT License (MIT). Please see License File for more information.

codingwithrk/double-back-to-close 适用场景与选型建议

codingwithrk/double-back-to-close 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 54 次下载、GitHub Stars 达 1, 最近一次更新时间为 2026 年 04 月 15 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 codingwithrk/double-back-to-close 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 codingwithrk/double-back-to-close 我们能提供哪些服务?
定制开发 / 二次开发

基于 codingwithrk/double-back-to-close 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 54
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 43
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-04-15