Le Flutter
Micro-framework
Pour les Apps Modernes
Une base solide pour construire des applications Flutter. Routage, gestion d'état, réseau, et plus encore — le tout dans un package élégant.
Tout ce dont vous avez besoin pour construire
Nylo fournit tous les outils nécessaires pour créer des applications Flutter prêtes pour la production en toute confiance.
Routage
Routage simple et déclaratif avec des gardes de route, des paramètres et le support du deep linking.
Gestion d'État
Gestion d'état réactive intégrée avec des contrôleurs et une persistance d'état facile.
Réseau
Classes de services API élégantes avec sérialisation automatique des modèles et intercepteurs.
Formulaires
Gestion puissante des formulaires avec validation, casting et liaison de données automatique.
Authentification
Authentification sécurisée avec gardes de route, stockage de jetons et gestion de sessions.
Metro CLI
Générez des pages, modèles, contrôleurs et plus avec de puissantes commandes CLI.
Créez n'importe quoi depuis le terminal
Metro est l'outil CLI de Nylo qui vous aide à créer des scaffolds de pages, modèles, contrôleurs, widgets et plus avec une seule commande.
En savoir plus sur Metrometro 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());
Intégration API sans effort
Écrivez des services API propres et maintenables avec parsing JSON automatique, gestion des erreurs et intercepteurs de requêtes.
En savoir plus sur le RéseauOutils puissants pour créer
Tout ce dont vous avez besoin pour construire votre prochaine application Flutter
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()
]
);
});
Créez des routes complexes, des interfaces et des pages UI pour votre application Flutter.
En savoir plus
Authentifier un utilisateur
String userToken = "eyJhbG123...";
await Auth.authenticate(data: {"token": userToken});
Maintenant, lorsque votre utilisateur ouvre l'application, il sera authentifié.
final userData = Auth.data();
// {"token": "eyJhbG123..."}
bool isAuthenticated = await Auth.isAuthenticated();
// true
Si vous avez défini une authenticatedRoute dans votre routeur, cette page sera présentée lorsque l'utilisateur ouvrira à nouveau l'application.
appRouter() => nyRoutes((router) {
...
router.add(LandingPage.path).initialRoute();
router.add(DashboardPage.path).authenticatedRoute();
// overrides the initial route when a user is authenticated
Déconnecter l'utilisateur
await Auth.logout();
Authentifiez les utilisateurs dans votre application Flutter.
En savoir plus
Créer un formulaire
metro make:form RegisterForm
Modifier votre formulaire
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");
}
Utiliser votre formulaire dans un widget
@override
Widget build(BuildContext context) {
return Scaffold(
body: RegisterForm(
submitButton: Button.primary(text: "Submit"),
onSubmit: (data) {
printInfo(data);
},
),
);
}
Gérez, validez et soumettez des données en un seul endroit avec Nylo Forms.
En savoir plus
Créer un widget géré par état
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");
}
)
Gestion d'état puissante pour les widgets dans votre application Flutter.
En savoir plus
Créer votre événement
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
);
}
}
Déclencher l'événement
MaterialButton(child: Text("Logout"),
onPressed: () {
event<LogoutEvent>();
},
)
Déclenchez des événements et écoutez-les dans votre application.
En savoir plus
Planifier une tâche à exécuter une fois
Nylo.scheduleOnce("onboarding_info", () {
print("Perform code here to run once");
});
Planifier une tâche à exécuter une fois après une date spécifique
Nylo.scheduleOnceAfterDate("app_review_rating", () {
print("Perform code to run once after DateTime(2025, 04, 10)");
}, date: DateTime(2025, 04, 10));
Planifier une tâche quotidienne
Nylo.scheduleOnceDaily("free_daily_coins", () {
print("Perform code to run once daily");
});
Planifiez des tâches à exécuter une fois ou quotidiennement dans votre application Flutter.
En savoir plus
Créer un service 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);
}
}
Appeler l'API depuis votre page
User? user = await api<UserApiService>(
(request) => request.fetchUser(1),
);
Des services API élégants avec parsing JSON automatique, mise en cache et intercepteurs.
En savoir plus
Sauvegarder les données en toute sécurité
// 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),
);
Lire avec conversion de type
// 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");
Stockage local sécurisé avec conversion de type, expiration TTL et collections.
En savoir plus
Ajoutez vos fichiers de langue
{
"welcome": "Welcome",
"greeting": "Hello {{name}}",
"navigation": {
"home": "Home",
"profile": "Profile"
}
}
Traduisez le texte dans vos widgets
// Simple translation
Text("welcome".tr()) // "Welcome"
// With arguments
Text("greeting".tr(arguments: {"name": "Anthony"}))
// "Hello Anthony"
// Nested keys
Text("navigation.home".tr()) // "Home"
Support multilingue avec fichiers JSON, arguments et RTL.
En savoir plus
Créer un hub de navigation
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),
),
};
});
}
Changer de mise en page facilement
// Bottom navigation
NavigationHubLayout.bottomNav()
// Top navigation
NavigationHubLayout.topNav()
// Journey / wizard flow
NavigationHubLayout.journey()
Créez des navigations en bas, en haut ou des flux de parcours avec maintien de l'état.
En savoir plus
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