Flutter
Mikro-framework
Modern Uygulamalar İçin
Flutter uygulamaları oluşturmak için sağlam bir temel. Yönlendirme, durum yönetimi, ağ işlemleri ve daha fazlası — hepsi zarif bir pakette.
İnşa etmek için ihtiyacınız olan her şey
Nylo, güvenle üretime hazır Flutter uygulamaları oluşturmak için ihtiyacınız olan tüm araçları sağlar.
Yönlendirme
Rota koruyucuları, parametreler ve derin bağlantı desteği ile basit, bildirimsel yönlendirme.
Durum Yönetimi
Kontrolörler ve kolay durum kalıcılığı ile yerleşik reaktif durum yönetimi.
Ağ İşlemleri
Otomatik model serileştirme ve interceptor'lar ile zarif API hizmet sınıfları.
Formlar
Doğrulama, dönüştürme ve otomatik veri bağlama ile güçlü form işleme.
Kimlik Doğrulama
Rota koruyucuları, token depolama ve oturum yönetimi ile güvenli kimlik doğrulama.
Metro CLI
Güçlü CLI komutları ile sayfalar, modeller, kontrolörler ve daha fazlasını oluşturun.
Terminalden her şeyi oluşturun
Metro, tek bir komutla sayfalar, modeller, kontrolörler, widget'lar ve daha fazlasını iskeletlemenize yardımcı olan Nylo'nun CLI aracıdır.
Metro hakkında daha fazla bilgi edininmetro make:page HomePage
# Creates a new page called HomePage
metro make:api_service User
# Creates a new API Service called UserApiService
metro make:model User
# Creates a new model called User
metro make:stateful_widget FavouriteWidget
# Creates a new stateful widget called FavouriteWidget
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 işleme ve istek interceptor'ları ile temiz, bakımı kolay API hizmetleri yazın.
Ağ İşlemleri hakkında daha fazla bilgi edininOluşturmak için güçlü araçlar
Bir sonraki Flutter uygulamanızı oluşturmak için ihtiyacınız olan her şey
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 bilgi
Kullanı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 bilgi
Form 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 bilgi
Durum 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 bilgi
Etkinliğ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 bilgi
Bir 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 bilgi
API 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 bilgi
Verileri 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 bilgi
Dil 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 bilgi
Navigasyon 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 bilgi
I'm new to Dart and new to your framework (which I love)
Peter Senior Director of Heroku Global
I wanted to thank you guys for the great job you are doing.
@youssefKadaouiAbbassi
Just to say that I am in love with @nylo_dev's website!! Definitely gonna explore it!
@esfoliante_txt
Really love the concept of this framework
@Chrisvidal
Nylo is the best framework for flutter, which makes developing easy
@higakijin
This is incredible. Very well done!
FireflyDaniel
Very nice Framework! Thank you so much!
@ChaoChao2509
I just discovered this framework and I'm very impressed. Thank you
@lepresk
Great work on Nylo
@dylandamsma
This is by far the best framework out there. Amazing quality and features. Thanks so much.
@2kulfi
It's interesting and very amazing. It makes the work more easier and less time consuming. Great work. Thank you
darkreader01
Salut. Je viens juste de découvrir votre outils et je le trouve vraiment super. Une belle découverte pour moi 👌🤌
ojean-01