easy_utils 0.2.4 copy "easy_utils: ^0.2.4" to clipboard
easy_utils: ^0.2.4 copied to clipboard

Some utilities to make your Flutter experience easier and better.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:easy_utils/easy_utils.dart';

void main() => runApp(const MyMaterialApp());

class MyMaterialApp extends StatelessWidget {
  const MyMaterialApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorKey: EasyNav.navigatorKey,
      debugShowCheckedModeBanner: false,
      title: 'Flutter Easy Utils Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      routes: {
        '/': (c) => MaterialHomePage(),
        '/second': (c) => MaterialSecondPage(),
      },
      initialRoute: '/',
    );
  }
}

class MaterialHomePage extends StatelessWidget {
  const MaterialHomePage();

  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          centerTitle: false,
          title: Text(EasyNav.appTitle),
        ),
        body: SingleChildScrollView(
          child: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisSize: MainAxisSize.min,
              children: [
                ..._navigationUtils,
                SizedBox(height: 16),
                ..._httpUtils,
                SizedBox(height: 16),
                ..._getDisplayUtils(context),
                SizedBox(height: 16),
                ..._platformUtils,
              ],
            ),
          ),
        ),
      );

  List<Widget> get _navigationUtils => [
        Text('Navigator Utils'),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () => EasyNav.pushNamed(
            '/second',
            // Default value
            routeType: PageRouteType.DEFAULT_APP,
            arguments: 'BLABLABLA',
            invisibleName: true,
          ),
          child: Text('Open second page (App class)'),
        ),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () => EasyNav.push(
            MaterialSecondPage(),
            routeType: PageRouteType.DEFAULT_OS,
          ),
          child: Text('Open second page (OS)'),
        ),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () => EasyNav.push(
            MaterialSecondPage(),
            routeType: PageRouteType.MATERIAL,
          ),
          child: Text('Open second page (Material)'),
        ),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () => EasyNav.push(
            MaterialSecondPage(),
            routeType: PageRouteType.CUPERTINO,
          ),
          child: Text('Open second page (Cupertino)'),
        ),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () => EasyNav.push(
            MaterialSecondPage(),
            routeType: PageRouteType.FADE,
          ),
          child: Text('Open second page (Fade)'),
        ),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () => EasyNav.push(
            MaterialSecondPage(),
            routeType: PageRouteType.SLIDE,
          ),
          child: Text('Open second page (Slide)'),
        ),
      ];

  List<Widget> _getDisplayUtils(BuildContext context) => [
        Text('Display Utils'),
        SizedBox(height: 16),
        Text(
            'Physical size: ${EasyDisplay.physicalWidth}x${EasyDisplay.physicalHeight}'),
        Text('Media query size (context): ${_getMediaQuerySize(context)}'),
        Text(
            'Media query size (navContext): ${_getMediaQuerySize(EasyNav.context)}'),
        Text(
            'Media query size (appContext): ${_getMediaQuerySize(EasyNav.appContext)}'),
        Text(
            'Media query size (focusContext): ${_getMediaQuerySize(EasyNav.focusContext!)}'),
      ];

  String _getMediaQuerySize(BuildContext context) {
    var mediaQuerySize = EasyDisplay.create(context).mediaQuery.size;
    return '${mediaQuerySize.width}x${mediaQuerySize.height}';
  }

  List<Widget> get _httpUtils => [
        Text('HTTP Utils'),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () => EasyNav.push(MaterialHTTPPage()),
          child: Text('Open HTTP page'),
        ),
      ];

  List<Widget> get _platformUtils => [
        Text('Platform Utils'),
        SizedBox(height: 16),
        Text('Apple: $isApple (iOS: $isIOS - macOS: $isMacOS)'),
        Text('Google: $isGoogle (Android: $isAndroid - Fuchsia: $isFuchsia)'),
        Text(
            'Desktop: $isDesktop (Linux: $isLinux - MacOS: $isMacOS - Windows: $isWindows)'),
        Text('Mobile: $isMobile (Android: $isAndroid - iOS: $isIOS)'),
        Text('Web: $isWeb'),
      ];
}

class MaterialSecondPage extends StatelessWidget {
  const MaterialSecondPage();

  @override
  Widget build(BuildContext context) {
    var routeName = EasyNav.getCurrentRouteName();
    var routeArgs = EasyNav.getCurrentRouteArguments();

    return Scaffold(
      appBar: AppBar(
        centerTitle: false,
        title: Text('Second page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text('Example second page'),
            Text('Route name: $routeName'),
            Text('Route args: $routeArgs'),
          ],
        ),
      ),
    );
  }
}

class MaterialHTTPPage extends StatefulWidget {
  const MaterialHTTPPage();

  State<MaterialHTTPPage> createState() => _MaterialHTTPPageState();
}

class _MaterialHTTPPageState extends State<MaterialHTTPPage> {
  @override
  void initState() {
    EasyHttp.instance.prefix = 'https://httpbin.org';
    super.initState();
  }

  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          centerTitle: false,
          title: Text('HTTP page'),
          leading: IconButton(
            onPressed: EasyNav.pop,
            icon: Icon(Icons.arrow_back),
          ),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              FutureBuilder(
                future: EasyHttp.instance.sendPOST(
                  '/anything',
                  headers: {
                    'User-Agent': 'EasyUtils/Demo',
                    // don't use the Content-Type if you enable sendBodyAsForm
                    'Content-Type': 'application/json; charset=utf-8'
                  },
                  body: <String, String>{
                    'app_name': 'easy_utils',
                  },
                ),
                builder: (context, snapshot) => Text(
                  snapshot.data?.body ??
                      snapshot.error?.toString() ??
                      'Loading...',
                  style: TextStyle(fontFamily: 'monospace'),
                ),
              ),
            ],
          ),
        ),
      );
}
copied to clipboard
1
likes
160
points
64
downloads

Publisher

verified publisherfurkank.net

Weekly Downloads

2024.09.26 - 2025.04.10

Some utilities to make your Flutter experience easier and better.

Repository (GitHub)

Documentation

API reference

License

GPL-3.0 (license)

Dependencies

flutter, http, http_parser

More

Packages that depend on easy_utils