flutter_pro_tools 1.1.7
flutter_pro_tools: ^1.1.7 copied to clipboard
is a Flutter package that provides a collection of utilities and tools to help streamline your development process.
example/lib/main.dart
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_pro_tools/src/app_locale.dart';
import 'package:flutter_pro_tools/src/flutter_pro_tools.dart';
import 'package:flutter_pro_tools/src/language_change_provider.dart';
import 'package:flutter_pro_tools/src/responsive_text.dart';
import 'package:flutter_pro_tools/src/socket_connection.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
FlutterProTools.setFirebaseProjectConfig(
apiKey: 'apiKey',
appId: 'appId',
messagingSenderId: 'messagingSenderId',
projectId: 'projectId');
if (!kIsWeb) {
await FlutterProTools.initFlutterNotifications();
}
await FlutterProTools.setPortraitDevice();
runApp(
const ProviderScope(
child: MyApp(),
),
);
}
class MyApp extends ConsumerWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context, WidgetRef ref) {
var state = ref.watch(languageStatus);
return MaterialApp(
navigatorKey: FlutterProTools.navigatorKey,
scaffoldMessengerKey: FlutterProTools.snackBarKey,
title: 'App name',
home: const HomePage(),
locale: state.locale,
supportedLocales: AppLocale.supportedLocale(),
localeResolutionCallback: AppLocale.localeResolutionCallback,
localizationsDelegates: AppLocale.localizationsDelegates(),
);
}
}
class HomePage extends ConsumerWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
ref.watch(languageStatus);
var languageState = ref.read(languageStatus.notifier);
return Scaffold(
key: FlutterProTools.snackBarKey,
appBar: AppBar(title: ResponsiveText(FlutterProTools.translate('Home'))),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
SocketConnection.get(
event: 'event',
function: (data) {
FlutterProTools.logFile(message: "$data");
},
);
SocketConnection.post(
event: 'event',
data: {"name": "my name"},
);
},
child: ResponsiveText(
FlutterProTools.translate("Send data to socket"),
),
),
ElevatedButton(
onPressed: () {
SocketConnection.withAck(
event: 'event',
data: {"name": "my name"},
function: (data) {
FlutterProTools.logFile(
message: data.toString(), name: 'my socket log');
},
);
},
child: ResponsiveText(
FlutterProTools.translate("Send Ack data to socket"),
),
),
ElevatedButton(
onPressed: () {
FlutterProTools.navigationPush(
const NewPage(),
);
},
child: ResponsiveText(
FlutterProTools.translate("Navigate to New Page"),
),
),
ElevatedButton(
onPressed: () {
FlutterProTools.showLoadingDialog();
Future.delayed(const Duration(seconds: 2), () {
FlutterProTools.dismissLoadingDialog();
FlutterProTools.showSnackBar(
message: FlutterProTools.translate("Loading Completed"),
);
});
},
child: ResponsiveText(
FlutterProTools.translate("Show Loading Dialog"),
),
),
ElevatedButton(
onPressed: () async {
String? data = await FlutterProTools.getRequest(
url: "https://jsonplaceholder.typicode.com/posts/1",
response: (data) => data.toString(),
);
FlutterProTools.showAlertDialog(
title: "GET Request",
content: ResponsiveText(
data ?? FlutterProTools.translate("No data"),
),
);
},
child: ResponsiveText(
FlutterProTools.translate("Perform GET Request"),
),
),
ElevatedButton(
onPressed: () async {
await FlutterProTools.saveLocalData(
key: "username", value: "JohnDoe");
String? username =
await FlutterProTools.getLocalData(key: "username");
FlutterProTools.showAlertDialog(
title: "Local Storage",
content: ResponsiveText(
"${FlutterProTools.translate("Saved username")}: $username",
),
);
},
child: ResponsiveText(
FlutterProTools.translate("Save and Retrieve Local Data"),
),
),
ElevatedButton(
onPressed: () async {
languageState.changeLocale('ar');
},
child: ResponsiveText(
FlutterProTools.translate("Change language"),
),
),
ElevatedButton(
onPressed: () async {
FlutterProTools.navigationPush(const LoginPage());
},
child: ResponsiveText(
FlutterProTools.translate("Go to login page"),
),
),
ElevatedButton(
onPressed: () async {
FlutterProTools.removeLocalData(key: 'username');
},
child: ResponsiveText(
FlutterProTools.translate("Remove local data"),
),
),
],
),
),
);
}
}
class NewPage extends StatelessWidget {
const NewPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("New Page"),
),
body: Center(
child: ElevatedButton(
onPressed: () {
FlutterProTools.navigationReplace(
const HomePage(),
);
},
child: const ResponsiveText("Go Back to Home"),
),
),
);
}
}
class LoginPage extends StatefulWidget {
const LoginPage({super.key});
@override
LoginPageState createState() => LoginPageState();
}
class LoginPageState extends State<LoginPage> {
final TextEditingController _emailController = TextEditingController();
final TextEditingController _passwordController = TextEditingController();
void _login() {
if (FlutterProTools.formKey.currentState!.validate()) {
FlutterProTools.showLoadingDialog();
// Simulate a network request
Future.delayed(const Duration(seconds: 2), () {
FlutterProTools.dismissLoadingDialog();
_saveUserData();
FlutterProTools.showSnackBar(message: "Login Successful");
FlutterProTools.navigationRemoveAllPreviousPages(
const HomePage(),
);
});
} else {
FlutterProTools.showWarningSnackBar(message: 'some field is required');
}
}
void _saveUserData() {
FlutterProTools.saveLocalData(key: "email", value: _emailController.text);
}
@override
void initState() {
// TODO: implement initState
super.initState();
_emailController.text;
_passwordController.text;
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_emailController.dispose();
_passwordController.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: FlutterProTools.snackBarKey,
appBar: AppBar(
title: const Text("Login"),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: FlutterProTools.formKey,
child: Column(
children: [
TextFormField(
controller: _emailController,
decoration: const InputDecoration(labelText: "Email"),
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter your email";
}
return null;
},
),
TextFormField(
controller: _passwordController,
decoration: const InputDecoration(labelText: "Password"),
obscureText: true,
validator: (value) {
if (value == null || value.isEmpty) {
return "Please enter your password";
}
return null;
},
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: _login,
child: const Text("Login"),
),
],
),
),
),
);
}
}