GoRouter ile Derin Rotalama (Deep Linking) ve Korumalı Rotalar
GoRouter ile Derin Rotalama (Deep Linking) ve Korumalı Rotalar
1. Konunun Mimari Önemi ve Temel Çalışma Prensipleri
Derin rotalama (deep linking) ve korumalı rotalar, bir uygulamanın kullanıcı deneyimi ve güvenliğini önemli ölçüde etkileyen iki ana bileşendir. GoRouter, Flutter uygulamalarında bu özellikleri etkili bir şekilde yönetmek için kullanılan güçlü bir rotalar yönetimi kütüphanesidir.
Derin rotalama, kullanıcıların uygulamanın belirli bir iç sayfasına doğrudan erişmesini sağlar. Bu, paylaşılan bağlantılar aracılığıyla kullanıcıların belirli içeriklere veya eylemlere erişmesini kolaylaştırır. Korumalı rotalar ise, uygulamanın hassas alanlarına erişimi kısıtlar ve kullanıcıların yetkili olup olmadığını kontrol eder.
2. Kurumsal Projelerde Dikkat Edilmesi Gereken En İyi Pratikler (Best Practices)
- Yetkilendirme Kontrolleri: Her rotanın yetkilendirme kontrolüne tabi tutulması gerekmektedir. Kullanıcının belirli bir rotaya erişimi olup olmadığını belirlemek için oturum durumunu ve rollerini kontrol etmek önemlidir.
- Performans Optimizasyonu: Derin rotalama ve rotaların hızlı ve verimli bir şekilde işlenmesi için, rotaların ön yüklenmesi ve caching stratejilerinin uygulanması gerekmektedir.
- Gerçek Zamanlı Güvenlik: Rotaların güvenliği için sürekli olarak güvenlik ihlallerini tespit eden ve gerekli önlemleri alacak bir sistem olmalıdır.
- Kullanıcı Deneyimi: Derin rotalama linkleri, kullanıcıların uygulamanın iç yapısına hakim olmasını zorlaştırır. Bu nedenle, kullanıcıların belirli bir duruma taşınırken herhangi bir engel olmamalıdır.
3. Gerçek Dünya Senaryolarına Uygun Kod Bloğu Örneği
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
void main() {
final GoRouter router = GoRouter(
routes: [
GoRoute(
path: '/',
builder: (context, state) => const HomeScreen(),
routes: [
GoRoute(
path: 'profile',
builder: (context, state) => const ProfileScreen(),
redirect: (context, state) {
final loggedIn = AuthService.isLoggedIn();
if (!loggedIn) {
return '/login';
}
return null;
},
),
],
),
GoRoute(
path: '/login',
builder: (context, state) => const LoginScreen(),
),
],
);
runApp(MyApp(router: router));
}
class MyApp extends StatelessWidget {
final GoRouter router;
const MyApp({super.key, required this.router});
@override
Widget build(BuildContext context) {
return MaterialApp.router(
routerConfig: router,
);
}
}
class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Home Screen')),
body: Center(
child: ElevatedButton(
onPressed: () {
context.go('/profile');
},
child: const Text('Go to Profile'),
),
),
);
}
}
class ProfileScreen extends StatelessWidget {
const ProfileScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Profile Screen')),
body: Center(
child: const Text('Welcome to your profile!'),
),
);
}
}
class LoginScreen extends StatelessWidget {
const LoginScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Login Screen')),
body: Center(
child: const Text('Please log in to access your profile.'),
),
);
}
}
class AuthService {
static bool isLoggedIn() {
// Implement your authentication logic here
return true; // Example: assume user is logged in
}
}
4. Performans Optimizasyonu ve Olası Darboğazlar
Derin rotalama ve rotaların hızlı bir şekilde işlenmesi için performans optimizasyonu önemlidir. Bu, rotaların ön yüklenmesi ve caching stratejilerinin uygulanması gibi yöntemlerle sağlanabilir.
Olası darboğazlar arasında, rotaların çok karmaşık olması ve kullanıcı deneyimi üzerinde olumsuz etkileri olabilir. Ayrıca, rotaların güvenliği ve yetkilendirme kontrolü de önemli bir noktadır. Bu nedenle, bu alanlar üzerinde sürekli olarak iyileştirme ve test yapmak önemlidir.





