O Flutter
Micro-framework
Para Apps Modernos
Uma base sólida para criar aplicativos Flutter. Rotas, gerenciamento de estado, rede e muito mais — tudo em um pacote elegante.
Tudo o que você precisa para criar
Nylo fornece todas as ferramentas que você precisa para criar aplicativos Flutter prontos para produção com confiança.
Rotas
Rotas simples e declarativas com guardas de rota, parâmetros e suporte a deep linking.
Gerenciamento de Estado
Gerenciamento de estado reativo integrado com controladores e persistência de estado facilitada.
Rede
Classes de serviço de API elegantes com serialização automática de modelos e interceptadores.
Formulários
Manipulação poderosa de formulários com validação, casting e vinculação automática de dados.
Autenticação
Autenticação segura com guardas de rota, armazenamento de tokens e gerenciamento de sessões.
Metro CLI
Gere páginas, modelos, controladores e muito mais com comandos CLI poderosos.
Crie qualquer coisa pelo terminal
Metro é a ferramenta CLI do Nylo que ajuda você a criar páginas, modelos, controladores, widgets e muito mais com um único comando.
Saiba mais sobre 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());
Integração de API sem esforço
Escreva serviços de API limpos e sustentáveis com parsing JSON automático, tratamento de erros e interceptadores de requisições.
Saiba mais sobre RedeFerramentas poderosas para criar
Tudo o que você precisa para criar seu próximo aplicativo 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()
]
);
});
Construa rotas complexas, interfaces e páginas de UI para seu aplicativo Flutter.
Saiba mais
Autenticar um usuário
String userToken = "eyJhbG123...";
await Auth.authenticate(data: {"token": userToken});
Agora, quando seu usuário abrir o aplicativo, ele estará autenticado.
final userData = Auth.data();
// {"token": "eyJhbG123..."}
bool isAuthenticated = await Auth.isAuthenticated();
// true
Se você definiu um authenticatedRoute no seu roteador, essa página será apresentada quando o usuário abrir o aplicativo novamente.
appRouter() => nyRoutes((router) {
...
router.add(LandingPage.path).initialRoute();
router.add(DashboardPage.path).authenticatedRoute();
// overrides the initial route when a user is authenticated
Desconectar o usuário
await Auth.logout();
Autentique usuários no seu aplicativo Flutter.
Saiba mais
Criar um Formulário
metro make:form RegisterForm
Modifique seu formulário
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");
}
Use seu formulário em um widget
@override
Widget build(BuildContext context) {
return Scaffold(
body: RegisterForm(
submitButton: Button.primary(text: "Submit"),
onSubmit: (data) {
printInfo(data);
},
),
);
}
Gerencie, valide e envie dados em um só lugar com Nylo Forms.
Saiba mais
Crie um widget com gerenciamento de estado
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");
}
)
Gerenciamento de estado poderoso para widgets no seu aplicativo Flutter.
Saiba mais
Crie seu evento
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
);
}
}
Despache o evento
MaterialButton(child: Text("Logout"),
onPressed: () {
event<LogoutEvent>();
},
)
Despache eventos e escute-os no seu aplicativo.
Saiba mais
Agendar uma tarefa para executar uma vez
Nylo.scheduleOnce("onboarding_info", () {
print("Perform code here to run once");
});
Agendar uma tarefa para executar uma vez após uma data específica
Nylo.scheduleOnceAfterDate("app_review_rating", () {
print("Perform code to run once after DateTime(2025, 04, 10)");
}, date: DateTime(2025, 04, 10));
Agendar uma tarefa para executar uma vez por dia
Nylo.scheduleOnceDaily("free_daily_coins", () {
print("Perform code to run once daily");
});
Agende tarefas para executar uma vez ou diariamente no seu aplicativo Flutter.
Saiba mais
Criar um Serviço de 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);
}
}
Chame a API da sua página
User? user = await api<UserApiService>(
(request) => request.fetchUser(1),
);
Serviços de API elegantes com parsing JSON automático, cache e interceptadores.
Saiba mais
Salvar dados com segurança
// 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),
);
Ler com conversão de tipo
// 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");
Armazenamento local seguro com conversão de tipo, expiração TTL e coleções.
Saiba mais
Adicione seus arquivos de idioma
{
"welcome": "Welcome",
"greeting": "Hello {{name}}",
"navigation": {
"home": "Home",
"profile": "Profile"
}
}
Traduza textos nos seus widgets
// Simple translation
Text("welcome".tr()) // "Welcome"
// With arguments
Text("greeting".tr(arguments: {"name": "Anthony"}))
// "Hello Anthony"
// Nested keys
Text("navigation.home".tr()) // "Home"
Suporte a vários idiomas com arquivos JSON, argumentos e RTL.
Saiba mais
Criar um Hub de Navegação
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),
),
};
});
}
Troque layouts facilmente
// Bottom navigation
NavigationHubLayout.bottomNav()
// Top navigation
NavigationHubLayout.topNav()
// Journey / wizard flow
NavigationHubLayout.journey()
Construa navegação inferior, superior ou fluxos de jornada com manutenção de estado.
Saiba mais
Amado pela comunidade
O que os desenvolvedores estão dizendo sobre Nylo Website
Participe da discussãoI'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