Flutter
Micro-framework
Untuk Aplikasi Modern
Nylo memberi setiap proyek fondasi kokoh yang sama — routing, state, jaringan, formulir, dan autentikasi — sehingga Anda mulai dari fitur pertama, bukan berkas pertama.
dart pub global activate nylo_installer
Semua yang Anda butuhkan untuk membangun
Enam pilar, satu konvensi. Masing-masing hadir dengan generator Metro, nilai bawaan yang masuk akal, dan jalan keluar — di dalamnya tetap Flutter murni.
Routing
Rute deklaratif dengan guard, parameter bertipe, transisi, dan deep linking.
Pengelolaan state
State reaktif dengan controller, hook siklus hidup, dan penyimpanan yang tanpa repot.
Networking
Kelas layanan API dengan dekode model otomatis dan interceptor permintaan.
Formulir
Deklarasikan field sekali — validasi, konversi tipe, dan data binding ikut menyertai.
Autentikasi
Penanganan sesi, penyimpanan token, dan route guard tanpa konfigurasi khusus.
Metro CLI
Hasilkan halaman, model, controller, formulir, dan tema dari satu perintah.
Buat apa saja dari terminal
Metro membuat halaman, model, controller, widget, dan lainnya — terhubung ke router dan struktur folder Anda, bukan sekadar ditaruh di pojok.
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());
Integrasi API yang mudah
Tulis layanan API yang bersih dan mudah dirawat dengan penguraian JSON otomatis, penanganan error, dan interceptor permintaan — tanpa boilerplate Dio di halaman Anda.
Pelajari lebih lanjut tentang NetworkingLihat dalam kode yang benar-benar akan Anda tulis
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()
]
);
});
Bangun rute kompleks, antarmuka, dan halaman UI untuk aplikasi Flutter Anda.
Pelajari lebih lanjutAutentikasi pengguna
String userToken = "eyJhbG123...";
await Auth.authenticate(data: {"token": userToken});
Sekarang, ketika pengguna Anda membuka aplikasi, mereka akan terautentikasi.
final userData = Auth.data();
// {"token": "eyJhbG123..."}
bool isAuthenticated = await Auth.isAuthenticated();
// true
Jika Anda telah menetapkan authenticatedRoute di router Anda, maka halaman ini akan ditampilkan ketika pengguna membuka aplikasi lagi.
appRouter() => nyRoutes((router) {
...
router.add(LandingPage.path).initialRoute();
router.add(DashboardPage.path).authenticatedRoute();
// overrides the initial route when a user is authenticated
Logout pengguna
await Auth.logout();
Autentikasi pengguna di aplikasi Flutter Anda.
Pelajari lebih lanjutBuat Formulir
metro make:form RegisterForm
Modifikasi formulir Anda
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");
}
Gunakan formulir Anda di widget
@override
Widget build(BuildContext context) {
return Scaffold(
body: RegisterForm(
submitButton: Button.primary(text: "Submit"),
onSubmit: (data) {
printInfo(data);
},
),
);
}
Kelola, validasi, dan kirim data di satu tempat dengan Nylo Forms.
Pelajari lebih lanjutBuat widget yang dikelola state
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");
}
)
Manajemen state yang kuat untuk widget di aplikasi Flutter Anda.
Pelajari lebih lanjutBuat event Anda
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
);
}
}
Kirim event
MaterialButton(child: Text("Logout"),
onPressed: () {
event<LogoutEvent>();
},
)
Kirim event dan dengarkan di aplikasi Anda.
Pelajari lebih lanjutJadwalkan tugas untuk dijalankan sekali
Nylo.scheduleOnce("onboarding_info", () {
print("Perform code here to run once");
});
Jadwalkan tugas untuk dijalankan sekali setelah tanggal tertentu
Nylo.scheduleOnceAfterDate("app_review_rating", () {
print("Perform code to run once after DateTime(2025, 04, 10)");
}, date: DateTime(2025, 04, 10));
Jadwalkan tugas untuk dijalankan sekali sehari
Nylo.scheduleOnceDaily("free_daily_coins", () {
print("Perform code to run once daily");
});
Jadwalkan tugas untuk dijalankan sekali atau harian di aplikasi Flutter Anda.
Pelajari lebih lanjutBuat Layanan API
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);
}
}
Panggil API dari halaman Anda
User? user = await api<UserApiService>(
(request) => request.fetchUser(1),
);
Layanan API yang elegan dengan parsing JSON otomatis, caching, dan interceptor.
Pelajari lebih lanjutSimpan data dengan aman
// 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),
);
Baca dengan konversi tipe
// 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");
Penyimpanan lokal yang aman dengan konversi tipe, kedaluwarsa TTL, dan koleksi.
Pelajari lebih lanjutTambahkan file bahasa Anda
{
"welcome": "Welcome",
"greeting": "Hello {{name}}",
"navigation": {
"home": "Home",
"profile": "Profile"
}
}
Terjemahkan teks di widget Anda
// Simple translation
Text("welcome".tr()) // "Welcome"
// With arguments
Text("greeting".tr(arguments: {"name": "Anthony"}))
// "Hello Anthony"
// Nested keys
Text("navigation.home".tr()) // "Home"
Dukungan multi-bahasa dengan file JSON, argumen, dan RTL.
Pelajari lebih lanjutBuat Hub Navigasi
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),
),
};
});
}
Ganti tata letak dengan mudah
// Bottom navigation
NavigationHubLayout.bottomNav()
// Top navigation
NavigationHubLayout.topNav()
// Journey / wizard flow
NavigationHubLayout.journey()
Bangun navigasi bawah, navigasi atas, atau alur perjalanan dengan pemeliharaan state.
Pelajari lebih lanjutDikembangkan secara terbuka, dipakai di produksi
“Saya baru di Dart dan baru di framework kalian — yang sangat saya sukai.”
“Nylo adalah framework terbaik untuk Flutter — membuat pengembangan jadi mudah.”
@higakijin
“Sejauh ini framework terbaik yang ada. Kualitas dan fiturnya luar biasa.”
@2kulfi
“Ini membuat pekerjaan lebih mudah dan lebih cepat. Kerja bagus.”
darkreader01
“Baru menemukan framework ini dan saya sangat terkesan. Terima kasih.”
@lepresk
“Saya sangat suka konsep framework ini.”
@Chrisvidal
“Saya ingin berterima kasih atas kerja hebat yang kalian lakukan.”
@youssefKadaouiAbbassi
“Sekadar ingin bilang bahwa saya suka sekali situs @nylo_dev!”
@esfoliante_txt
“Ini luar biasa. Kerja yang sangat bagus!”
FireflyDaniel
Aplikasi Flutter Anda berikutnya dimulai dengan satu perintah
Gratis, berlisensi MIT, dan di dalamnya tetap Flutter biasa.
dart pub global activate nylo_installer