Flutter
Mikro-framework
Modern Uygulamalar İçin
Nylo her projeye aynı sağlam temeli verir — yönlendirme, durum, ağ, formlar ve kimlik doğrulama — böylece birinci dosyadan değil, birinci özellikten başlarsınız.
dart pub global activate nylo_installer
İnşa etmek için ihtiyacınız olan her şey
Altı temel, tek bir kural. Her biri Metro üreteçleri, makul varsayılanlar ve bir kaçış kapısıyla gelir — altında hâlâ saf Flutter var.
Yönlendirme
Korumalar, tipli parametreler, geçişler ve deep linking ile bildirimsel rotalar.
Durum yönetimi
Denetleyiciler, yaşam döngüsü kancaları ve zahmetsiz kalıcılıkla tepkisel durum.
Ağ İşlemleri
Otomatik model çözümleme ve istek yakalayıcılarıyla gelen API servis sınıfları.
Formlar
Alanları bir kez tanımlayın — doğrulama, tür dönüşümü ve veri bağlama onlarla birlikte gelir.
Kimlik Doğrulama
Özel bir kurulum olmadan oturum yönetimi, token saklama ve rota korumaları.
Metro CLI
Tek bir komutla sayfa, model, denetleyici, form ve tema üretin.
Terminalden her şeyi oluşturun
Metro sayfa, model, denetleyici, widget ve daha fazlasını üretir — bir köşeye bırakmak yerine yönlendiricinize ve klasör yapınıza bağlayarak.
class ApiService extends NyApiService {
@override
String get baseUrl => "https://api.example.com/v1";
Future<List<Post>> posts() async {
return await network(
request: (request) => request.get("/posts"),
);
}
}
// Usage in your page
final posts = await api<ApiService>((request) => request.posts());
Zahmetsiz API entegrasyonu
Otomatik JSON ayrıştırma, hata yönetimi ve istek yakalayıcılarıyla temiz, sürdürülebilir API servisleri yazın — sayfalarınızda Dio kalıp kodu olmadan.
Ağ İşlemleri hakkında daha fazla bilgi edininGerçekten yazacağınız kodda görün
appRouter() => nyRoutes((router) {
router.add(HomePage.path).initialRoute();
router.add(DiscoverPage.path);
router.add(LoginPage.path,
transitionType: TransitionType.bottomToTop());
router.add(ProfilePage.path,
routeGuard: [
AuthGuard()
]
);
});
Flutter uygulamanız için karmaşık rotalar, arayüzler ve UI sayfaları oluşturun.
Daha fazla bilgiKullanıcı kimliğini doğrula
String userToken = "eyJhbG123...";
await Auth.authenticate(data: {"token": userToken});
Artık kullanıcınız uygulamayı açtığında kimliği doğrulanmış olacak.
final userData = Auth.data();
// {"token": "eyJhbG123..."}
bool isAuthenticated = await Auth.isAuthenticated();
// true
Router'ınızda authenticatedRoute ayarladıysanız, kullanıcı uygulamayı tekrar açtığında bu sayfa gösterilecektir.
appRouter() => nyRoutes((router) {
...
router.add(LandingPage.path).initialRoute();
router.add(DashboardPage.path).authenticatedRoute();
// overrides the initial route when a user is authenticated
Kullanıcıyı çıkış yaptır
await Auth.logout();
Flutter uygulamanızda kullanıcıları doğrulayın.
Daha fazla bilgiForm Oluştur
metro make:form RegisterForm
Formunuzu değiştirin
class RegisterForm extends NyFormWidget {
RegisterForm({super.key, super.submitButton, super.onSubmit, super.onFailure});
// Add your fields here
@override
fields() => [
Field.capitalizeWords("name",
label: "Name",
validator: FormValidator.notEmpty(),
),
Field.email("email_address",
label: "Email",
validator: FormValidator.email()
),
Field.password("password",
label: "Password",
validator: FormValidator.password(),
),
];
static NyFormActions get actions => const NyFormActions("RegisterForm");
}
Formunuzu bir widget'ta kullanın
@override
Widget build(BuildContext context) {
return Scaffold(
body: RegisterForm(
submitButton: Button.primary(text: "Submit"),
onSubmit: (data) {
printInfo(data);
},
),
);
}
Nylo Forms ile verileri tek bir yerde yönetin, doğrulayın ve gönderin.
Daha fazla bilgiDurum yönetimli widget oluştur
metro make:stateful_widget CartIcon
class _CartIconState extends NyState<CartIcon> {
...
@override
Map<String, Function> get stateActions => {
"clear_cart": () {
_items = 0;
},
...
};
@override
Widget view(BuildContext context) {
return Container(child: Text("Items in cart: ${_items}"));
}
}
Use CartIcon.action("clear_cart")
Button.primary(text: "Add to cart",
onPressed: () {
CartIcon.action("clear_cart");
}
)
Flutter uygulamanızdaki widget'lar için güçlü durum yönetimi.
Daha fazla bilgiEtkinliğinizi oluşturun
metro make:event Logout
class LogoutEvent implements NyEvent {
@override
final listeners = {
DefaultListener: DefaultListener(),
};
}
class DefaultListener extends NyListener {
@override
handle(dynamic event) async {
// logout user
await Auth.logout();
// redirect to home page
routeTo(HomePage.path,
navigationType: NavigationType.pushAndForgetAll
);
}
}
Etkinliği gönderin
MaterialButton(child: Text("Logout"),
onPressed: () {
event<LogoutEvent>();
},
)
Uygulamanızda etkinlikleri gönderin ve dinleyin.
Daha fazla bilgiBir görevi bir kez çalıştırmak için zamanla
Nylo.scheduleOnce("onboarding_info", () {
print("Perform code here to run once");
});
Belirli bir tarihten sonra bir kez çalıştırmak için görevi zamanla
Nylo.scheduleOnceAfterDate("app_review_rating", () {
print("Perform code to run once after DateTime(2025, 04, 10)");
}, date: DateTime(2025, 04, 10));
Günde bir kez çalıştırmak için görevi zamanla
Nylo.scheduleOnceDaily("free_daily_coins", () {
print("Perform code to run once daily");
});
Flutter uygulamanızda görevleri bir kez veya günlük çalıştırmak için zamanlayın.
Daha fazla bilgiAPI Servisi Oluşturun
metro make:api_service User
class UserApiService extends NyApiService {
@override
String get baseUrl => getEnv("API_BASE_URL");
Future<User?> fetchUser(int id) async {
return await get<User>(
"/users/$id",
queryParameters: {"include": "profile"},
);
}
Future<User?> createUser(Map<String, dynamic> data) async {
return await post<User>("/users", data: data);
}
}
Sayfanızdan API'yi çağırın
User? user = await api<UserApiService>(
(request) => request.fetchUser(1),
);
Otomatik JSON ayrıştırma, önbellekleme ve interceptor'lar ile zarif API servisleri.
Daha fazla bilgiVerileri güvenle kaydedin
// Save values to secure storage
await NyStorage.save("coins", 100);
await NyStorage.save("username", "Anthony");
await NyStorage.save("isPremium", true);
// Save with TTL (auto-expires)
await NyStorage.save("session", "abc123",
expiry: Duration(hours: 1),
);
Tip dönüşümü ile okuyun
// Automatic type casting
String? username = await NyStorage.read("username");
int? coins = await NyStorage.read<int>("coins");
bool? isPremium = await NyStorage.read<bool>("isPremium");
// Delete a value
await NyStorage.delete("coins");
Tip dönüşümü, TTL süresi ve koleksiyonlar ile güvenli yerel depolama.
Daha fazla bilgiDil dosyalarınızı ekleyin
{
"welcome": "Welcome",
"greeting": "Hello {{name}}",
"navigation": {
"home": "Home",
"profile": "Profile"
}
}
Widget'larınızdaki metni çevirin
// Simple translation
Text("welcome".tr()) // "Welcome"
// With arguments
Text("greeting".tr(arguments: {"name": "Anthony"}))
// "Hello Anthony"
// Nested keys
Text("navigation.home".tr()) // "Home"
JSON dosyaları, argümanlar ve RTL ile çoklu dil desteği.
Daha fazla bilgiNavigasyon Hub'ı Oluşturun
metro make:navigation_hub base
class _BaseNavigationHubState extends NavigationHub<BaseNavigationHub> {
NavigationHubLayout? layout = NavigationHubLayout.bottomNav();
@override
bool get maintainState => true;
_BaseNavigationHubState() : super(() async {
return {
0: NavigationTab(
title: "Home",
page: HomeTab(),
icon: Icon(Icons.home),
),
1: NavigationTab(
title: "Settings",
page: SettingsTab(),
icon: Icon(Icons.settings),
),
};
});
}
Düzenleri kolayca değiştirin
// Bottom navigation
NavigationHubLayout.bottomNav()
// Top navigation
NavigationHubLayout.topNav()
// Journey / wizard flow
NavigationHubLayout.journey()
Durum koruması ile alt navigasyon, üst navigasyon veya yolculuk akışları oluşturun.
Daha fazla bilgiAçıkça geliştirildi, üretimde kullanılıyor
“Dart'ta da sizin çatınızda da yeniyim — ve bayıldım.”
“Nylo, Flutter için en iyi çatı — geliştirmeyi kolaylaştırıyor.”
@higakijin
“Açık ara en iyi çatı. Kalitesi ve özellikleri harika.”
@2kulfi
“İşi kolaylaştırıyor ve zamandan kazandırıyor. Harika iş.”
darkreader01
“Bu çatıyı yeni keşfettim ve çok etkilendim. Teşekkürler.”
@lepresk
“Bu çatının konseptini gerçekten çok sevdim.”
@Chrisvidal
“Yaptığınız harika iş için teşekkür etmek istedim.”
@youssefKadaouiAbbassi
“Sadece @nylo_dev'in sitesine bayıldığımı söylemek istedim!”
@esfoliante_txt
“Bu inanılmaz. Çok iyi iş!”
FireflyDaniel
Bir sonraki Flutter uygulamanız tek bir komutla başlıyor
Ücretsiz, MIT lisanslı ve altında hâlâ sadece Flutter var.
dart pub global activate nylo_installer