V7 Nylo v7 आ गया है! नया क्या है देखें →
Nylo
Flutter माइक्रो-फ़्रेमवर्क MIT लाइसेंस प्राप्त

Flutter
माइक्रो-फ्रेमवर्क
आधुनिक ऐप्स के लिए

Nylo हर प्रोजेक्ट को एक जैसी मज़बूत नींव देता है — रूटिंग, स्टेट, नेटवर्किंग, फ़ॉर्म और प्रमाणीकरण — ताकि आप पहली फ़ाइल से नहीं, पहले फ़ीचर से शुरू करें।

एक लाइन में इंस्टॉल करें
$ dart pub global activate nylo_installer
इंस्टॉलेशन गाइड पढ़ें फिर अपने प्रोजेक्ट का नाम रखने के लिए निर्देशों का पालन करें।
my_app तैयार
lib/
app/  — मॉडल, नेटवर्किंग, प्रोवाइडर
bootstrap/  — बूट और सेटअप
config/  — थीम, कीज़, डिकोडर
resources/
pages/  home_page.dart
widgets/
themes/
routes/  router.dart
main.dart
हर Nylo प्रोजेक्ट की संरचना एक जैसी होती है — आपके साथियों की भी।
862 ★ GitHub पर Dart 3 के अनुकूल MIT लाइसेंस प्राप्त pub.dev पर nylo.dev द्वारा प्रकाशित 2021 से सक्रिय रूप से मेंटेन किया जा रहा है
सुविधाएं

बनाने के लिए आपको जो कुछ भी चाहिए

छह स्तंभ, एक ही परंपरा। हर एक के साथ Metro जनरेटर, समझदार डिफ़ॉल्ट और एक निकास का रास्ता आता है — अंदर से यह अब भी सादा Flutter है।

>_ Metro CLI

टर्मिनल से कुछ भी बनाएं

Metro पेज, मॉडल, कंट्रोलर, विजेट और बहुत कुछ बनाता है — जो आपके राउटर और फ़ोल्डर संरचना से जुड़े होते हैं, किसी कोने में फेंके नहीं जाते।

विजेट्स, ऐप की आंतरिक संरचना और कॉन्फ़िगरेशन को कवर करने वाले 17 जनरेटर
जनरेट करते समय रूट्स अपने आप रजिस्टर हो जाते हैं
पूरी टीम में एक जैसा नामकरण और फ़ाइल व्यवस्था
Metro के बारे में और जानें
zsh — my_app
$ metro make:page HomePage
  ✓ Created lib/resources/pages/home_page.dart
$ metro make:api_service User
  ✓ Created lib/app/networking/user_api_service.dart
$ metro make:model User
  ✓ Created lib/app/models/user.dart
$ metro make:stateful_widget FavouriteWidget
app/networking/api_service.dart
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());
नेटवर्किंग

आसान API इंटीग्रेशन

स्वचालित JSON पार्सिंग, एरर हैंडलिंग और रिक्वेस्ट इंटरसेप्टर के साथ साफ़-सुथरी, मेंटेन करने योग्य API सर्विसेज़ लिखें — आपके पेजों में Dio का दोहराव वाला कोड नहीं।

नेटवर्किंग के बारे में और जानें
खोजें

उसी कोड में देखें जो आप वाकई लिखेंगे

routes/router.dart
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 एप्लिकेशन के लिए जटिल रूट, इंटरफेस और UI पेज बनाएं।

अधिक जानें
चरण 1

उपयोगकर्ता को प्रमाणित करें

String userToken = "eyJhbG123...";

await Auth.authenticate(data: {"token": userToken});
चरण 2

अब, जब आपका उपयोगकर्ता ऐप खोलेगा तो वे प्रमाणित होंगे।

final userData = Auth.data();
// {"token": "eyJhbG123..."}

bool isAuthenticated = await Auth.isAuthenticated();
// true
चरण 3

यदि आपने अपने राउटर में authenticatedRoute सेट किया है, तो जब उपयोगकर्ता फिर से ऐप खोलेगा तो यह पेज प्रस्तुत होगा।

routes/router.dart
appRouter() => nyRoutes((router) {
    ...
    router.add(LandingPage.path).initialRoute();

    router.add(DashboardPage.path).authenticatedRoute();
    // overrides the initial route when a user is authenticated

उपयोगकर्ता को लॉगआउट करें

await Auth.logout();

अपने Flutter एप्लिकेशन में उपयोगकर्ताओं को प्रमाणित करें।

अधिक जानें
चरण 1

फॉर्म बनाएं

terminal
metro make:form RegisterForm
चरण 2

अपना फॉर्म संशोधित करें

app/forms/register_form.dart
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");
}
चरण 3

विजेट में अपना फॉर्म उपयोग करें

register_page.dart
@override
Widget build(BuildContext context) {
  return Scaffold(
    body: RegisterForm(
      submitButton: Button.primary(text: "Submit"),
      onSubmit: (data) {
        printInfo(data);
      },
    ),
  );
}

Nylo Forms के साथ एक ही स्थान पर डेटा प्रबंधित, मान्य और सबमिट करें।

अधिक जानें
चरण 1

स्टेट मैनेज्ड विजेट बनाएं

terminal
metro make:stateful_widget CartIcon
resources/cart_icon_widget.dart
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}"));
  }
}
चरण 2

Use CartIcon.action("clear_cart")

another widget
Button.primary(text: "Add to cart",
    onPressed: () {
      CartIcon.action("clear_cart");
    }
)

आपके Flutter एप्लिकेशन में विजेट्स के लिए शक्तिशाली स्टेट मैनेजमेंट।

अधिक जानें
चरण 1

अपना इवेंट बनाएं

terminal
metro make:event Logout
app/events/logout_event.dart
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
        );
    }
}
चरण 2

इवेंट डिस्पैच करें

MaterialButton(child: Text("Logout"),
    onPressed: () {
        event<LogoutEvent>();
    },
)

अपने एप्लिकेशन में इवेंट डिस्पैच करें और उन्हें सुनें।

अधिक जानें

एक बार चलाने के लिए टास्क शेड्यूल करें

Nylo.scheduleOnce("onboarding_info", () {
    print("Perform code here to run once");
});

किसी विशेष तारीख के बाद एक बार चलाने के लिए टास्क शेड्यूल करें

Nylo.scheduleOnceAfterDate("app_review_rating", () {
    print("Perform code to run once after DateTime(2025, 04, 10)");
}, date: DateTime(2025, 04, 10));

दैनिक एक बार चलाने के लिए टास्क शेड्यूल करें

Nylo.scheduleOnceDaily("free_daily_coins", () {
    print("Perform code to run once daily");
});

अपने Flutter एप्लिकेशन में एक बार या दैनिक चलाने के लिए टास्क शेड्यूल करें।

अधिक जानें
चरण 1

API सर्विस बनाएं

terminal
metro make:api_service User
app/networking/user_api_service.dart
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);
    }
}
चरण 2

अपने पेज से API कॉल करें

User? user = await api<UserApiService>(
    (request) => request.fetchUser(1),
);

ऑटोमैटिक JSON पार्सिंग, कैशिंग और इंटरसेप्टर्स के साथ सुंदर API सर्विसेज।

अधिक जानें
चरण 1

डेटा सुरक्षित रूप से सेव करें

saving_data.dart
// 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),
);
चरण 2

टाइप कास्टिंग के साथ पढ़ें

// 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");

टाइप कास्टिंग, TTL एक्सपायरी और कलेक्शन के साथ सुरक्षित लोकल स्टोरेज।

अधिक जानें
चरण 1

अपनी भाषा फाइलें जोड़ें

lang/en.json
{
    "welcome": "Welcome",
    "greeting": "Hello {{name}}",
    "navigation": {
        "home": "Home",
        "profile": "Profile"
    }
}
चरण 2

अपने विजेट्स में टेक्स्ट का अनुवाद करें

// Simple translation
Text("welcome".tr())  // "Welcome"

// With arguments
Text("greeting".tr(arguments: {"name": "Anthony"}))
// "Hello Anthony"

// Nested keys
Text("navigation.home".tr())  // "Home"

JSON फाइलों, आर्गुमेंट्स और RTL के साथ बहु-भाषा समर्थन।

अधिक जानें
चरण 1

नेविगेशन हब बनाएं

terminal
metro make:navigation_hub base
resources/pages/base_navigation_hub.dart
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),
            ),
        };
    });
}
चरण 2

लेआउट आसानी से बदलें

// Bottom navigation
NavigationHubLayout.bottomNav()

// Top navigation
NavigationHubLayout.topNav()

// Journey / wizard flow
NavigationHubLayout.journey()

स्टेट मेंटेनेंस के साथ बॉटम नेव, टॉप नेव या जर्नी फ्लो बनाएं।

अधिक जानें
समुदाय

खुले में बनाया गया, प्रोडक्शन में इस्तेमाल होता है

“मैं Dart में नया हूँ और आपके फ़्रेमवर्क में भी — जो मुझे बहुत पसंद है।”

P
Peter
सीनियर डायरेक्टर, Heroku Global

“Nylo Flutter के लिए सबसे अच्छा फ़्रेमवर्क है — यह डेवलपमेंट को आसान बना देता है।”

@higakijin

“अब तक का सबसे बेहतरीन फ़्रेमवर्क। शानदार गुणवत्ता और सुविधाएँ।”

@2kulfi

“यह काम को आसान और तेज़ बना देता है। बहुत बढ़िया।”

darkreader01

“मैंने अभी यह फ़्रेमवर्क खोजा और बहुत प्रभावित हूँ। धन्यवाद।”

@lepresk

“इस फ़्रेमवर्क की अवधारणा मुझे सच में बहुत पसंद है।”

@Chrisvidal

“मैं आप लोगों को इस बेहतरीन काम के लिए धन्यवाद कहना चाहता था।”

@youssefKadaouiAbbassi

“बस यह कहना था कि मुझे @nylo_dev की वेबसाइट बहुत पसंद आई!”

@esfoliante_txt

“यह अविश्वसनीय है। बहुत बढ़िया काम!”

FireflyDaniel

आपका अगला Flutter ऐप एक ही कमांड से शुरू होता है

मुफ़्त, MIT लाइसेंस के तहत, और अंदर से यह अब भी सिर्फ़ Flutter ही है।

$ dart pub global activate nylo_installer