SyncEase
SyncEase is a lightweight and versatile state management library for Flutter applications. It provides simple yet powerful tools for managing the state of your application with ease.
Features
- Simple API: SyncEase offers a straightforward API for managing state, making it easy to integrate into your Flutter projects.
- Error Handling: Easily handle errors within your application state and propagate them to your UI.
- Loading State: Manage loading states within your application, providing feedback to users during asynchronous operations.
- Batch Operations: Perform batch operations on your state, allowing you to update multiple values atomically.
- Listener Support: SyncEase supports listeners, allowing you to react to state changes and update your UI accordingly.
- Versatile: Suitable for various types of state management scenarios, including simple value states and list states.
- App Simulator: SyncEase provides methods for simulating various gestures and keyboard inputs in Flutter applications. This is particularly useful for testing UI interactions and automating certain user actions.
- EaseDevice Utility: The
EaseDevice
class provides various utilities for accessing device-related information and functionalities in Flutter applications. These utilities include checking internet connectivity, retrieving screen dimensions, determining the platform name and version, setting screen orientation, managing full-screen mode, detecting device type (mobile, tablet, desktop), handling the software keyboard, and more.
Installation
To use SyncEase in your Flutter project, add the following dependency to your pubspec.yaml
file:
dependencies:
sync_ease: ^1.0.0`
Then, run flutter pub get
to install the package.
Usage
Here's a simple example of how to use SyncEase to manage state in your Flutter application:
1. Import SyncEase
import 'package:sync_ease/sync_ease.dart';
2. Create an Instance of Ease
final Ease<int> counter = Ease(0);
3. Use EaseBuilder to React to State Changes
EaseBuilder<int>(
ease: counter,
builder: (context, value) => Text(
value.toString(),
style: TextStyle(fontSize: 24),
),
),
4. Update State Values
counter.value++; // Increment the counter
Counter App With SyncEase
import 'package:flutter/material.dart';
import 'package:sync_ease/sync_ease.dart';
class CounterLogic extends SyncEaseLogic{
int a=0;
increment(){
a++;
put(); // update Logic Builder Widget
}
}
class MyApp extends StatelessWidget{
final CounterLogic _counterLogic=SyncEaseLogic.reg(CounterLogic());
MyApp({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
child: const Icon(Icons.add),
onPressed: (){
_counterLogic.increment();
},
),
body: Center(
child: LogicBuilder(
logic: _counterLogic,
builder: (BuildContext context) {
return Text(_counterLogic.a.toString());
},
)
),
);
}
}
Advantages
- Simplicity: SyncEase offers a simple and intuitive API, making it easy to manage state in Flutter applications.
- Flexibility: It provides various features like error handling, loading state management, and batch operations, catering to diverse state management needs.
- Efficiency: With its listener support and batch operations, SyncEase ensures efficient state updates and UI rendering.
- Compatibility: SyncEase seamlessly integrates with existing Flutter projects and other state management solutions, allowing for smooth adoption.
- Show Snack Bar, Alert Dialog, and Date Picker Anywhere in the App
Dialogs
Show Snack Bar, Alert Dialog, and Date Picker Anywhere in the App
You can now use the showSyncSnackBar
, showSyncAlertBox
, and showSyncDatePicker
functions to display snack bars, alert dialogs, and date pickers from anywhere in the app, even outside the widget tree.
Example
showSyncSnackBar(SnackBar(content: Text('Hello, world!')));
showSyncAlertBox(
builder: (BuildContext context) => AlertDialog(
title: Text('Alert'),
content: Text('This is an alert dialog.'),
),
);
showSyncDatePicker(
initialDate: DateTime.now(),
firstDate: DateTime(2022),
lastDate: DateTime(2025),
);
Simple Navigation
to(SecondPage());
to(SecondPage(),asrguments:{"name":"Jhone"});
back();
EaseSimulator Class
The EaseSimulator
class provides methods for simulating various gestures and keyboard inputs in Flutter applications. This class is particularly useful for testing UI interactions and automating certain user actions.
Methods
-
getWidgetOffset(GlobalKey key): Offset?
-
Retrieves the offset of a widget identified by its GlobalKey on the screen.
-
tapDown(Offset offset, {bool showGestureMarker = true}): Future
-
Simulates a tap down event at the specified position on the screen.
-
tapUp(Offset offset, {bool showGestureMarker = true}): Future
-
Simulates a tap up event at the specified position on the screen.
-
tap(Offset offset, {bool showGestureMarker = true}): Future
-
Simulates a tap event (tap down followed by tap up) at the specified position on the screen.
-
longPress(Offset offset, {bool showGestureMarker = true}): Future
-
Simulates a long press event at the specified position on the screen.
-
scroll(Offset startOffset, Offset endOffset): Future
-
Simulates a scroll gesture starting from the given start offset to the end offset.
-
insertText(String text): Future
-
Inserts text into a text input field, simulating user keyboard input.
-
pinch(Offset focalPoint1, Offset focalPoint2): Future
-
Simulates a pinch gesture between two focal points on the screen.
-
zoom(Offset focalPoint1, Offset focalPoint2): Future
-
Simulates a zoom gesture between two focal points on the screen.
-
showGestureIndicator({required Offset position, Color color = Colors.red}): void
-
Displays a visual indicator at the specified position on the screen, useful for debugging and visualization of gestures.
Example Usage for getWidgetOffset
Offset? offset = EaseSimulator.getWidgetOffset(GlobalKey());
if (offset != null) {
print("Widget Offset: $offset");
}
Example Usage for tapDown
Offset offset = Offset(offset);
await EaseSimulator.tapDown(offset);
Example Usage for tapUp
Offset offset = Offset(100, 200);
await EaseSimulator.tapUp(offset);
Example Usage for tap
Offset offset = Offset(100, 200);
await EaseSimulator.tap(offset);
Example Usage for longPress
Offset offset = Offset(100, 200);
await EaseSimulator.longPress(offset);
Example Usage for scroll
Offset startOffset = Offset(100, 200);
Offset endOffset = Offset(100, 300);
await EaseSimulator.scroll(startOffset, endOffset);
Example Usage for insertText
await EaseSimulator.insertText("Hello, World!");
Example Usage for pinch
Offset focalPoint1 = Offset(100, 200);
Offset focalPoint2 = Offset(200, 300);
await EaseSimulator.pinch(focalPoint1, focalPoint2);
Example Usage for zoom
Offset focalPoint1 = Offset(100, 200);
Offset focalPoint2 = Offset(200, 300);
await EaseSimulator.zoom(focalPoint1, focalPoint2);
Example Usage for showGestureIndicator
Offset position = Offset(100, 200);
EaseSimulator.showGestureIndicator(position: position, color: Colors.blue);
EaseDevice Utility Class
The EaseDevice
class provides various utilities for accessing device-related information and functionalities in Flutter applications. These utilities include checking internet connectivity, retrieving screen dimensions, determining the platform name and version, setting screen orientation, managing full-screen mode, detecting device type (mobile, tablet, desktop), handling the software keyboard, and more.
Methods
-
isOnline(): Future
- Checks if the device is connected to the internet.
-
getScreenSize(): Size
- Retrieves the screen dimensions.
-
getScreenWidth(): double
- Retrieves the screen width.
-
getScreenHeight(): double
- Retrieves the screen height.
-
getPixelDensity(): double
- Retrieves the pixel density or device pixel ratio.
-
getPlatformName(): String
- Retrieves the platform name (e.g., "Android", "iOS").
-
getPlatformVersion(): String
- Retrieves the platform version.
-
isTablet(): bool
- Checks if the device is a tablet.
-
fullScreen(): Future
- Sets the app to full-screen mode.
-
setOrientation(DeviceOrientation orientation): Future
- Sets the preferred orientation for the app.
-
exitFullScreen(): void
- Exits full-screen mode.
-
isMobile(): bool
- Checks if the device is a mobile phone.
-
isDesktop(): bool
- Checks if the device is a desktop/laptop.
-
getPlatformLocale(): String
- Retrieves the platform's locale.
-
hasPhysicalKeyboard(): bool
- Checks if the device has a physical keyboard.
-
openKeyboard(): void
- Opens the software keyboard.
-
hideKeyboard(): void
- Hides the software keyboard.
Example Usage
import 'package:your_package/ease_device.dart';
void main() async {
// Check internet connectivity
bool isOnline = await EaseDevice.isOnline();
print('Is Online: $isOnline');
// Retrieve screen size
Size screenSize = EaseDevice.getScreenSize();
print('Screen Size: $screenSize');
// Check device type
bool isMobile = EaseDevice.isMobile();
bool isTablet = EaseDevice.isTablet();
bool isDesktop = EaseDevice.isDesktop();
print('Is Mobile: $isMobile, Is Tablet: $isTablet, Is Desktop: $isDesktop');
// Set full-screen mode
await EaseDevice.fullScreen();
// Hide keyboard
EaseDevice.hideKeyboard();
}
Documentation
For detailed documentation and API reference, visit the SyncEase Documentation.
Contributing
Contributions to SyncEase are welcome! If you find any bugs or have suggestions for improvements, please open an issue or submit a pull request on GitHub.
Libraries
- ease_extentions/ease_string
- ease_simulator/ease_simulator
- helper/ease_device
- helper/ease_helper
- helper/ease_logger
- sync_ease
- sync_ease/functions/widget_functions
- sync_ease/src/ease
- sync_ease/src/sync_ease_logic
- sync_ease/src/utils
- sync_ease/widgets/ease_builder
- sync_ease/widgets/logic_builder
- sync_ease/widgets/sync_ease_app