برنامه نویس موبایل (فلاتر ، اندروید ، یونیتی ، iOS)
مدیریت دکمه بک مرورگر در فلاتر با استفاده از GoRouter
در انتخاب ابزار مدیریت روتینگ در فلاتر، گزینههای زیادی وجود دارد. اما زمانی که به محبوبترین پکیجها نگاه میکنیم، GoRouter به عنوان یکی از بهترینها شناخته میشود. با وجود مزایای بسیار، GoRouter نیز با چالشهایی مواجه است و یکی از مشکلات قابل توجه آن، مدیریت دکمه بک مرورگر است. در این مقاله، به بررسی این مشکل و ارائه راهحل آن خواهیم پرداخت.
مشکل:
در یک برنامه معمولی، ناوبری بین صفحات به صورت پیوسته و منظم است. این ساختار اطمینان میدهد که کاربران روند خاصی را دنبال کنند. اما استفاده از دکمه بک مرورگر میتواند این روند را مختل کرده و باعث شود که برنامه به صورت غیرمنتظرهای رفتار کند یا توالی ناوبری مورد نظر از بین برود.
علاوه بر این، مدیریت این مسئله در چندین پلتفرم پیچیدگی دیگری را اضافه میکند. مهم است که کد به طور یکپارچه در تمام پلتفرمها، از جمله وب، بدون مشکل کار کند. هدف داشتن راهحلی است که نه تنها دکمه بک مرورگر را در وب مدیریت کند بلکه در سایر پلتفرمها نیز به درستی عمل کند.
راهحل:
گام 1: ایجاد یک فایل جاوا اسکریپت برای محدود کردن دکمه بک به صفحه اول PWA
اولین قدم، ایجاد یک فایل جاوا اسکریپت است که عملکرد دکمه بک را به صفحه اول برنامه وب پیشرفته (PWA) محدود کند.
نام فایل: clear_browser_history.js
function clearBrowserHistory(redirectUrl) {
// جایگزین کردن وضعیت فعلی با وضعیت جدید
history.replaceState(null, document.title, location.pathname);
// پاک کردن تاریخچه جلو
= function(event) {
// هدایت به یک صفحه خاص
.href = redirectUrl;
};
}
گام 2: درج فایل جاوا اسکریپت در HTML
در مرحله بعد، باید این فایل جاوا اسکریپت را به فایل HTML خود اضافه کنید. خط کد زیر را درست بالای تگ </body> اضافه کنید.
<script src="clear_browser_history.js">
گام 3: کپی فایل جاوا اسکریپت
اطمینان حاصل کنید که فایل clear_browser_history.js
در همان دایرکتوری که فایل HTML شما قرار دارد، کپی شده است.
گام 4: وارد کردن پکیج js و فراخوانی تابع جاوا اسکریپت در Dart
قبل از فراخوانی تابع جاوا اسکریپت، باید پکیج js را به فایل pubspec.yaml
خود اضافه کنید:
dependencies:
flutter:
sdk: flutter
js: ^0.6.3
سپس، در کد Dart خود، پکیج js را وارد کرده و تابع را فراخوانی کنید:
میتوانید دکمه بک مرورگر را شرطی کنید که در حالت دیباگ و یا رلیز به کدام صفحه برگردد.
js.context.callMethod('clearBrowserHistory', [
kDebugMode
? "http://localhost:80" // میتوانید پورت محلی خود را تنظیم کنید
: "https://ea2.dev" // میتوانید صفحه وب دلخواه خود را تنظیم کنید تا دکمه بک مرورگر به آن برگردد
]);
گام 5: ایجاد کلاس واسط برای مدیریت محیطهای وب و نیتیو
از آنجا که ما از پکیج js برای اجرای کد جاوا اسکریپت استفاده میکنیم، باید اطمینان حاصل کنیم که ایمپورت بسته به پلتفرم به صورت شرطی انجام میشود. ما یک کلاس واسط ایجاد خواهیم کرد که بسته به اینکه در محیط وب یا نیتیو اجرا میشود، رفتار متفاوتی داشته باشد. این نیاز به سه فایل برای پیادهسازی دارد:
نام فایل: multiPlatforms.dart
import 'native.dart' if (dart.library.html) 'web.dart' as switch_value;
class MultiPlatforms {
MultiPlatforms._();
static Future<void> clearBrowserHistory() {
return switch_value.clearBrowserHistory();
}
}
نام فایل: web.dart
import 'dart:js' as js;
import 'package:flutter/foundation.dart';
Future<void> clearBrowserHistory() async {
js.context.callMethod('clearBrowserHistory', [
kDebugMode
? "http://localhost:80" // میتوانید پورت سفارشی خود را تنظیم کنید
: "https://ea2.dev" // میتوانید صفحه وب سفارشی خود را تنظیم کنید
]);
}
نام فایل: native.dart
Future<void> clearBrowserHistory() async {}
مرحله 6: ادغام کد با GoRouter
برای گام آخر، باید تعیین کنید که کجا این کد را فراخوانی کنید. در GoRouter، قسمتی وجود دارد که ریدایرکت شدن را مدیریت میکند. بهترین نقطه برای فراخوانی کد پاک کردن تاریخچه مرورگر، این بخش است.
در اینجا یک نمونه کد آورده شده است:
final appRouter = GoRouter(
initialLocation: ... // این قسمت را بر اساس کد خود تکمیل کنید
redirect: (context, state) { // بخش مهم برای این مقاله در اینجا است
MultiPlatforms.clearBrowserHistory();
return null;
},
routes: [...] // این قسمت را بر اساس کد خود تکمیل کنید
);
با دنبال کردن این مراحل، میتوانید دکمه بازگشت مرورگر را به طور موثر در برنامه Flutter خود با استفاده از GoRouter مدیریت کنید و تجربه کاربری یکنواختی را در همه پلتفرمها تضمین کنید.
برای هرگونه سوال یا گفتگوی بیشتر، میتوانید در کامنتها یا از طریق LinkedIn با من ارتباط برقرار کنید.
مطلبی دیگر از این انتشارات
در باب factory constructor و static method در dart
مطلبی دیگر از این انتشارات
پارس کردن JSON به صورت دستی و اتوماتیک در فلاتر
مطلبی دیگر از این انتشارات
فلاتر وب - mouse effect (قسمت دوم)