Frontent design match
This commit is contained in:
parent
617379deef
commit
d33f051251
@ -300,6 +300,7 @@ import '../domain/use_cases/preferences_use_case.dart';
|
|||||||
import '../presentation/Screens/auth_verification/changepassword.dart';
|
import '../presentation/Screens/auth_verification/changepassword.dart';
|
||||||
import '../presentation/Screens/auth_verification/confirm_password.dart';
|
import '../presentation/Screens/auth_verification/confirm_password.dart';
|
||||||
import '../presentation/Screens/auth_verification/otp_verification.dart';
|
import '../presentation/Screens/auth_verification/otp_verification.dart';
|
||||||
|
import '../presentation/Screens/auth_verification/registration.dart';
|
||||||
import '../presentation/Screens/profilepage.dart';
|
import '../presentation/Screens/profilepage.dart';
|
||||||
import '../presentation/routes/auth_routes/login_route.dart';
|
import '../presentation/routes/auth_routes/login_route.dart';
|
||||||
import '../presentation/routes/bottom_bar_routes/tab_routes/home_route.dart';
|
import '../presentation/routes/bottom_bar_routes/tab_routes/home_route.dart';
|
||||||
@ -310,8 +311,12 @@ final GoRouter router = GoRouter(
|
|||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/',
|
path: '/',
|
||||||
//builder: (context, state) => LoginRoute(),
|
builder: (context, state) => LoginRoute(),
|
||||||
builder: (context, state) => MyHomePage(),
|
//builder: (context, state) => MyHomePage(),
|
||||||
|
),
|
||||||
|
GoRoute(
|
||||||
|
path: '/login',
|
||||||
|
builder: (context, state) => LoginRoute(),
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/myhomepage',
|
path: '/myhomepage',
|
||||||
@ -352,18 +357,14 @@ final GoRouter router = GoRouter(
|
|||||||
userId: '',
|
userId: '',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
// GoRoute(
|
|
||||||
// path: '/manageuser',
|
|
||||||
// builder: (context, state) {
|
|
||||||
// // Retrieve the title from extra or query params
|
|
||||||
// final title = state.extra as String? ?? 'Manage users';
|
|
||||||
// return ManageUserRouter(title: title);
|
|
||||||
// },
|
|
||||||
// ),
|
|
||||||
GoRoute(
|
GoRoute(
|
||||||
path: '/manageuser',
|
path: '/manageuser',
|
||||||
builder: (context, state) => ManageUserRouter(),
|
builder: (context, state) => ManageUserRouter(),
|
||||||
),
|
),
|
||||||
|
GoRoute(
|
||||||
|
path: '/registration',
|
||||||
|
builder: (context, state) => RegisterScreen(),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -87,18 +87,19 @@ class _ResetPasswordScreenState extends State<Changepassword> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Navigate to the Email Verification screen
|
// Navigate to the Email Verification screen
|
||||||
Navigator.push(
|
context.go('/mailverification');
|
||||||
context,
|
// Navigator.push(
|
||||||
MaterialPageRoute(
|
// context,
|
||||||
builder: (context) => EmailVerificationScreen(
|
// MaterialPageRoute(
|
||||||
email: email,
|
// builder: (context) => EmailVerificationScreen(
|
||||||
userId: widget.userId, // Pass user ID to the next screen
|
// email: email,
|
||||||
otp: otp,
|
// userId: widget.userId, // Pass user ID to the next screen
|
||||||
otpId: otpId,
|
// otp: otp,
|
||||||
sendVerificationCode: sendVerificationCode,
|
// otpId: otpId,
|
||||||
),
|
// sendVerificationCode: sendVerificationCode,
|
||||||
),
|
// ),
|
||||||
);
|
// ),
|
||||||
|
// );
|
||||||
} else {
|
} else {
|
||||||
final error =
|
final error =
|
||||||
jsonDecode(otpResponse.body)['error'] ?? "Unknown error";
|
jsonDecode(otpResponse.body)['error'] ?? "Unknown error";
|
||||||
|
|||||||
@ -208,6 +208,7 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
registrationSuccess = true;
|
registrationSuccess = true;
|
||||||
registrationFailed = false; // Show success message on success
|
registrationFailed = false; // Show success message on success
|
||||||
});
|
});
|
||||||
|
context.go('/profile');
|
||||||
|
|
||||||
// Navigate to ProfileScreen after successful registration
|
// Navigate to ProfileScreen after successful registration
|
||||||
// Navigator.pushReplacement(
|
// Navigator.pushReplacement(
|
||||||
@ -241,8 +242,414 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
double screenheight = MediaQuery.of(context).size.height;
|
double screenheight = MediaQuery.of(context).size.height;
|
||||||
double screenwidth = MediaQuery.of(context).size.width;
|
double screenwidth = MediaQuery.of(context).size.width;
|
||||||
|
|
||||||
Widget buildIconContainer(IconData icon, Color iconColor) {
|
|
||||||
return Container(
|
return Scaffold(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
body: registrationSuccess
|
||||||
|
? registration_success(context)
|
||||||
|
: registrationFailed
|
||||||
|
? registration_failed(context)
|
||||||
|
: Scaffold(
|
||||||
|
body: Padding(
|
||||||
|
padding: const EdgeInsets.all(20.0),
|
||||||
|
child: Form(
|
||||||
|
key: _formKey,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SizedBox(height: screenheight / 6),
|
||||||
|
Text(
|
||||||
|
'Register',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 32, fontWeight: FontWeight.w400),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10),
|
||||||
|
Text('Please enter your details'),
|
||||||
|
|
||||||
|
SizedBox(height: 20),
|
||||||
|
// Display this if registration is pending approval
|
||||||
|
TextFormField(
|
||||||
|
controller: _usernameController,
|
||||||
|
focusNode: _focusNodes[0],
|
||||||
|
decoration: InputDecoration(
|
||||||
|
hintText: _showHints[0] ? 'Username' : null,
|
||||||
|
prefixIcon: Icon(
|
||||||
|
Icons.person,
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
border: OutlineInputBorder(),
|
||||||
|
counterText: '',
|
||||||
|
),
|
||||||
|
validator: _validateUsername,
|
||||||
|
maxLength:
|
||||||
|
40, // Set the maximum length to 20 characters
|
||||||
|
maxLengthEnforcement: MaxLengthEnforcement.enforced,
|
||||||
|
),
|
||||||
|
SizedBox(height: 15),
|
||||||
|
TextFormField(
|
||||||
|
controller: _emailController,
|
||||||
|
focusNode: _focusNodes[1],
|
||||||
|
decoration: InputDecoration(
|
||||||
|
// hintText: 'Enter your email',
|
||||||
|
hintText:
|
||||||
|
_showHints[1] ? 'Enter your email' : null,
|
||||||
|
prefixIcon: Icon(
|
||||||
|
Icons.email,
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
border: OutlineInputBorder(),
|
||||||
|
counterText: '',
|
||||||
|
),
|
||||||
|
validator: _validateEmail,
|
||||||
|
maxLength: 320,
|
||||||
|
maxLengthEnforcement: MaxLengthEnforcement.enforced,
|
||||||
|
inputFormatters: [
|
||||||
|
LengthLimitingTextInputFormatter(
|
||||||
|
320), // Limit to 320 characters
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 15),
|
||||||
|
TextFormField(
|
||||||
|
controller: _passwordController,
|
||||||
|
focusNode: _focusNodes[2],
|
||||||
|
obscureText: _obscurePassword,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
hintText:
|
||||||
|
_showHints[2] ? 'Enter your password' : null,
|
||||||
|
prefixIcon: Icon(
|
||||||
|
Icons.lock,
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
suffixIcon: IconButton(
|
||||||
|
icon: Icon(
|
||||||
|
_obscurePassword
|
||||||
|
? Icons.visibility
|
||||||
|
: Icons.visibility_off,
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
_obscurePassword = !_obscurePassword;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
border: OutlineInputBorder(),
|
||||||
|
counterText: '',
|
||||||
|
),
|
||||||
|
validator: _validatePassword,
|
||||||
|
maxLength: 40,
|
||||||
|
maxLengthEnforcement: MaxLengthEnforcement.enforced,
|
||||||
|
),
|
||||||
|
SizedBox(height: 15),
|
||||||
|
TextFormField(
|
||||||
|
controller: _confirmpasswordController,
|
||||||
|
focusNode: _focusNodes[3],
|
||||||
|
obscureText: _obscureConfirmPassword,
|
||||||
|
decoration: InputDecoration(
|
||||||
|
hintText:
|
||||||
|
_showHints[3] ? 'Confirm password' : null,
|
||||||
|
prefixIcon: Icon(
|
||||||
|
Icons.lock,
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
suffixIcon: IconButton(
|
||||||
|
icon: Icon(
|
||||||
|
_obscureConfirmPassword
|
||||||
|
? Icons.visibility
|
||||||
|
: Icons.visibility_off,
|
||||||
|
color: Colors.blue,
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
setState(() {
|
||||||
|
_obscureConfirmPassword =
|
||||||
|
!_obscureConfirmPassword;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
|
border: OutlineInputBorder(),
|
||||||
|
counterText: '',
|
||||||
|
),
|
||||||
|
validator: _validateConfirmPassword,
|
||||||
|
maxLength: 40,
|
||||||
|
maxLengthEnforcement: MaxLengthEnforcement.enforced,
|
||||||
|
inputFormatters: [
|
||||||
|
LengthLimitingTextInputFormatter(
|
||||||
|
64), // Limit to 40 characters
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 10),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Checkbox(
|
||||||
|
value: isChecked,
|
||||||
|
onChanged: (value) {
|
||||||
|
setState(() {
|
||||||
|
isChecked = value ?? false;
|
||||||
|
showError = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
side: BorderSide(
|
||||||
|
color: showError ? Colors.red : Colors.grey,
|
||||||
|
width: 1.5,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Text.rich(
|
||||||
|
TextSpan(
|
||||||
|
text: 'I agree to ',
|
||||||
|
children: [
|
||||||
|
TextSpan(
|
||||||
|
text: 'Terms & Conditions',
|
||||||
|
style: TextStyle(color: Colors.blue),
|
||||||
|
),
|
||||||
|
TextSpan(text: ' and '),
|
||||||
|
TextSpan(
|
||||||
|
text: 'Privacy Policy',
|
||||||
|
style: TextStyle(color: Colors.blue),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
if (showError)
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 10.0),
|
||||||
|
child: Text(
|
||||||
|
'Please agree to terms and conditions.',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.red[700],
|
||||||
|
fontSize: 12,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
SizedBox(
|
||||||
|
width: screenwidth / 1.3,
|
||||||
|
child: ElevatedButton(
|
||||||
|
onPressed: _registerUser,
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
backgroundColor: Color(
|
||||||
|
0xFFA7887A), // Brownish color for Register
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"Register",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16, color: Colors.white),
|
||||||
|
),
|
||||||
|
SizedBox(width: 8),
|
||||||
|
Icon(Icons.arrow_forward,
|
||||||
|
color: Colors.white),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10),
|
||||||
|
Text(
|
||||||
|
"Already have an account?",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16, color: Colors.grey[600]),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10),
|
||||||
|
SizedBox(
|
||||||
|
width: screenwidth / 1.3,
|
||||||
|
child: ElevatedButton(
|
||||||
|
onPressed: () {
|
||||||
|
// Add your login logic here
|
||||||
|
context.go('/login');
|
||||||
|
},
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
backgroundColor: Color(
|
||||||
|
0xFF82AFCB), // Blueish color for Login
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
|
||||||
|
child: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
"Login",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(width: 8),
|
||||||
|
Icon(Icons.arrow_forward,
|
||||||
|
color: Colors.white),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 10,
|
||||||
|
),
|
||||||
|
Center(
|
||||||
|
child: Container(
|
||||||
|
height: screenheight / 8,
|
||||||
|
width: screenwidth / 2,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
image: DecorationImage(
|
||||||
|
image: AssetImage(
|
||||||
|
"assets/splash_screen/logo.png"), // Background image asset
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget registration_failed (BuildContext context) {
|
||||||
|
double screenheight = MediaQuery.of(context).size.height;
|
||||||
|
double screenwidth = MediaQuery.of(context).size.width;
|
||||||
|
return Scaffold(
|
||||||
|
body: Padding(
|
||||||
|
padding: const EdgeInsets.all(20.0),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SizedBox(height: screenheight / 8),
|
||||||
|
buildIconContainer(Icons.report, Colors.red),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
Text(
|
||||||
|
"Sorry ${_usernameController.text}!",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: Color(0xFF414042)),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10),
|
||||||
|
Text(
|
||||||
|
"Your registration process failed. For further assistance, please contact support.",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14,
|
||||||
|
color: Color(0xFF898C81),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: () => {
|
||||||
|
setState(() {
|
||||||
|
registrationFailed = false;
|
||||||
|
registrationSuccess = false;
|
||||||
|
_usernameController.clear();
|
||||||
|
_emailController.clear();
|
||||||
|
_passwordController.clear();
|
||||||
|
_confirmpasswordController.clear();
|
||||||
|
isChecked = false;
|
||||||
|
})
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'Retry',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: screenheight / 5),
|
||||||
|
Center(
|
||||||
|
child: Container(
|
||||||
|
height: screenheight / 8,
|
||||||
|
width: screenwidth / 2,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
image: DecorationImage(
|
||||||
|
image: AssetImage(
|
||||||
|
"assets/splash_screen/logo.png"), // Background image asset
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget registration_success (BuildContext context) {
|
||||||
|
double screenheight = MediaQuery.of(context).size.height;
|
||||||
|
double screenwidth = MediaQuery.of(context).size.width;
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.all(20.0),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SizedBox(height: screenheight / 8),
|
||||||
|
buildIconContainer(Icons.report, Color(0xFF7DAFBC)),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
Text(
|
||||||
|
"Your registration is pending for Admin Approval.",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: Color(0xFF414042)),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10),
|
||||||
|
Text(
|
||||||
|
"Access will be granted once your account is approved.",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14,
|
||||||
|
color: Color(0xFF898C81),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: () => {
|
||||||
|
context.go('/login')
|
||||||
|
// Navigator.pushReplacement(
|
||||||
|
// context,
|
||||||
|
// MaterialPageRoute(builder: (context) => LoginRoute()
|
||||||
|
//
|
||||||
|
// //ProfileScreen(userId: userID)
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'Go to Login',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: screenheight / 5),
|
||||||
|
Center(
|
||||||
|
child: Container(
|
||||||
|
height: screenheight / 8,
|
||||||
|
width: screenwidth / 2,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
image: DecorationImage(
|
||||||
|
image: AssetImage(
|
||||||
|
"assets/splash_screen/logo.png"), // Background image asset
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget buildIconContainer(IconData icon, Color iconColor) {
|
||||||
|
return Scaffold(
|
||||||
|
body: Container(
|
||||||
width: 60,
|
width: 60,
|
||||||
height: 60,
|
height: 60,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@ -261,419 +668,8 @@ class _RegisterScreenState extends State<RegisterScreen> {
|
|||||||
color: iconColor,
|
color: iconColor,
|
||||||
size: 30,
|
size: 30,
|
||||||
),
|
),
|
||||||
);
|
),
|
||||||
}
|
|
||||||
|
|
||||||
return Scaffold(
|
|
||||||
backgroundColor: Colors.white,
|
|
||||||
body: registrationSuccess
|
|
||||||
? Padding(
|
|
||||||
padding: const EdgeInsets.all(20.0),
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
SizedBox(height: screenheight / 8),
|
|
||||||
buildIconContainer(Icons.report, Color(0xFF7DAFBC)),
|
|
||||||
SizedBox(height: 20),
|
|
||||||
Text(
|
|
||||||
"Your registration is pending for Admin Approval.",
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 16,
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
color: Color(0xFF414042)),
|
|
||||||
),
|
|
||||||
SizedBox(height: 10),
|
|
||||||
Text(
|
|
||||||
"Access will be granted once your account is approved.",
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 14,
|
|
||||||
color: Color(0xFF898C81),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 10),
|
|
||||||
ElevatedButton(
|
|
||||||
onPressed: () => {
|
|
||||||
Navigator.pushReplacement(
|
|
||||||
context,
|
|
||||||
MaterialPageRoute(builder: (context) => LoginRoute()
|
|
||||||
|
|
||||||
//ProfileScreen(userId: userID)
|
|
||||||
),
|
|
||||||
),
|
|
||||||
},
|
|
||||||
child: Text(
|
|
||||||
'Go to Login',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: screenheight / 5),
|
|
||||||
Center(
|
|
||||||
child: Container(
|
|
||||||
height: screenheight / 8,
|
|
||||||
width: screenwidth / 2,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
image: DecorationImage(
|
|
||||||
image: AssetImage(
|
|
||||||
"assets/splash_screen/logo.png"), // Background image asset
|
|
||||||
fit: BoxFit.fill,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
))
|
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
: registrationFailed
|
|
||||||
? Padding(
|
|
||||||
padding: const EdgeInsets.all(20.0),
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
SizedBox(height: screenheight / 8),
|
|
||||||
buildIconContainer(Icons.report, Colors.red),
|
|
||||||
SizedBox(height: 20),
|
|
||||||
Text(
|
|
||||||
"Sorry ${_usernameController.text}!",
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 16,
|
|
||||||
fontWeight: FontWeight.w500,
|
|
||||||
color: Color(0xFF414042)),
|
|
||||||
),
|
|
||||||
SizedBox(height: 10),
|
|
||||||
Text(
|
|
||||||
"Your registration process failed. For further assistance, please contact support.",
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 14,
|
|
||||||
color: Color(0xFF898C81),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 10),
|
|
||||||
ElevatedButton(
|
|
||||||
onPressed: () => {
|
|
||||||
setState(() {
|
|
||||||
registrationFailed = false;
|
|
||||||
registrationSuccess = false;
|
|
||||||
_usernameController.clear();
|
|
||||||
_emailController.clear();
|
|
||||||
_passwordController.clear();
|
|
||||||
_confirmpasswordController.clear();
|
|
||||||
isChecked = false;
|
|
||||||
})
|
|
||||||
},
|
|
||||||
child: Text(
|
|
||||||
'Retry',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: screenheight / 5),
|
|
||||||
Center(
|
|
||||||
child: Container(
|
|
||||||
height: screenheight / 8,
|
|
||||||
width: screenwidth / 2,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
image: DecorationImage(
|
|
||||||
image: AssetImage(
|
|
||||||
"assets/splash_screen/logo.png"), // Background image asset
|
|
||||||
fit: BoxFit.fill,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
))
|
|
||||||
],
|
|
||||||
),
|
|
||||||
)
|
|
||||||
: Padding(
|
|
||||||
padding: const EdgeInsets.all(20.0),
|
|
||||||
child: Form(
|
|
||||||
key: _formKey,
|
|
||||||
child: SingleChildScrollView(
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: [
|
|
||||||
SizedBox(height: screenheight / 6),
|
|
||||||
Text(
|
|
||||||
'Register',
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 32, fontWeight: FontWeight.w400),
|
|
||||||
),
|
|
||||||
SizedBox(height: 10),
|
|
||||||
Text('Please enter your details'),
|
|
||||||
|
|
||||||
SizedBox(height: 20),
|
|
||||||
// Display this if registration is pending approval
|
|
||||||
TextFormField(
|
|
||||||
controller: _usernameController,
|
|
||||||
focusNode: _focusNodes[0],
|
|
||||||
decoration: InputDecoration(
|
|
||||||
hintText: _showHints[0] ? 'Username' : null,
|
|
||||||
prefixIcon: Icon(
|
|
||||||
Icons.person,
|
|
||||||
color: Colors.blue,
|
|
||||||
),
|
|
||||||
border: OutlineInputBorder(),
|
|
||||||
counterText: '',
|
|
||||||
),
|
|
||||||
validator: _validateUsername,
|
|
||||||
maxLength:
|
|
||||||
40, // Set the maximum length to 20 characters
|
|
||||||
maxLengthEnforcement: MaxLengthEnforcement.enforced,
|
|
||||||
),
|
|
||||||
SizedBox(height: 15),
|
|
||||||
TextFormField(
|
|
||||||
controller: _emailController,
|
|
||||||
focusNode: _focusNodes[1],
|
|
||||||
decoration: InputDecoration(
|
|
||||||
// hintText: 'Enter your email',
|
|
||||||
hintText:
|
|
||||||
_showHints[1] ? 'Enter your email' : null,
|
|
||||||
prefixIcon: Icon(
|
|
||||||
Icons.email,
|
|
||||||
color: Colors.blue,
|
|
||||||
),
|
|
||||||
border: OutlineInputBorder(),
|
|
||||||
counterText: '',
|
|
||||||
),
|
|
||||||
validator: _validateEmail,
|
|
||||||
maxLength: 320,
|
|
||||||
maxLengthEnforcement: MaxLengthEnforcement.enforced,
|
|
||||||
inputFormatters: [
|
|
||||||
LengthLimitingTextInputFormatter(
|
|
||||||
320), // Limit to 320 characters
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(height: 15),
|
|
||||||
TextFormField(
|
|
||||||
controller: _passwordController,
|
|
||||||
focusNode: _focusNodes[2],
|
|
||||||
obscureText: _obscurePassword,
|
|
||||||
decoration: InputDecoration(
|
|
||||||
hintText:
|
|
||||||
_showHints[2] ? 'Enter your password' : null,
|
|
||||||
prefixIcon: Icon(
|
|
||||||
Icons.lock,
|
|
||||||
color: Colors.blue,
|
|
||||||
),
|
|
||||||
suffixIcon: IconButton(
|
|
||||||
icon: Icon(
|
|
||||||
_obscurePassword
|
|
||||||
? Icons.visibility
|
|
||||||
: Icons.visibility_off,
|
|
||||||
color: Colors.blue,
|
|
||||||
),
|
|
||||||
onPressed: () {
|
|
||||||
setState(() {
|
|
||||||
_obscurePassword = !_obscurePassword;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
),
|
|
||||||
border: OutlineInputBorder(),
|
|
||||||
counterText: '',
|
|
||||||
),
|
|
||||||
validator: _validatePassword,
|
|
||||||
maxLength: 40,
|
|
||||||
maxLengthEnforcement: MaxLengthEnforcement.enforced,
|
|
||||||
),
|
|
||||||
SizedBox(height: 15),
|
|
||||||
TextFormField(
|
|
||||||
controller: _confirmpasswordController,
|
|
||||||
focusNode: _focusNodes[3],
|
|
||||||
obscureText: _obscureConfirmPassword,
|
|
||||||
decoration: InputDecoration(
|
|
||||||
hintText:
|
|
||||||
_showHints[3] ? 'Confirm password' : null,
|
|
||||||
prefixIcon: Icon(
|
|
||||||
Icons.lock,
|
|
||||||
color: Colors.blue,
|
|
||||||
),
|
|
||||||
suffixIcon: IconButton(
|
|
||||||
icon: Icon(
|
|
||||||
_obscureConfirmPassword
|
|
||||||
? Icons.visibility
|
|
||||||
: Icons.visibility_off,
|
|
||||||
color: Colors.blue,
|
|
||||||
),
|
|
||||||
onPressed: () {
|
|
||||||
setState(() {
|
|
||||||
_obscureConfirmPassword =
|
|
||||||
!_obscureConfirmPassword;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
),
|
|
||||||
border: OutlineInputBorder(),
|
|
||||||
counterText: '',
|
|
||||||
),
|
|
||||||
validator: _validateConfirmPassword,
|
|
||||||
maxLength: 40,
|
|
||||||
maxLengthEnforcement: MaxLengthEnforcement.enforced,
|
|
||||||
inputFormatters: [
|
|
||||||
LengthLimitingTextInputFormatter(
|
|
||||||
64), // Limit to 40 characters
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(height: 10),
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
Checkbox(
|
|
||||||
value: isChecked,
|
|
||||||
onChanged: (value) {
|
|
||||||
setState(() {
|
|
||||||
isChecked = value ?? false;
|
|
||||||
showError = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
side: BorderSide(
|
|
||||||
color: showError ? Colors.red : Colors.grey,
|
|
||||||
width: 1.5,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: Text.rich(
|
|
||||||
TextSpan(
|
|
||||||
text: 'I agree to ',
|
|
||||||
children: [
|
|
||||||
TextSpan(
|
|
||||||
text: 'Terms & Conditions',
|
|
||||||
style: TextStyle(color: Colors.blue),
|
|
||||||
),
|
|
||||||
TextSpan(text: ' and '),
|
|
||||||
TextSpan(
|
|
||||||
text: 'Privacy Policy',
|
|
||||||
style: TextStyle(color: Colors.blue),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
if (showError)
|
|
||||||
Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.start,
|
|
||||||
children: [
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(left: 10.0),
|
|
||||||
child: Text(
|
|
||||||
'Please agree to terms and conditions.',
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.red[700],
|
|
||||||
fontSize: 12,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(height: 20),
|
|
||||||
SizedBox(
|
|
||||||
width: screenwidth / 1.3,
|
|
||||||
child: ElevatedButton(
|
|
||||||
onPressed: _registerUser,
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
backgroundColor: Color(
|
|
||||||
0xFFA7887A), // Brownish color for Register
|
|
||||||
shape: RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.circular(10),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
child: Row(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
"Register",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 16, color: Colors.white),
|
|
||||||
),
|
|
||||||
SizedBox(width: 8),
|
|
||||||
Icon(Icons.arrow_forward,
|
|
||||||
color: Colors.white),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(height: 10),
|
|
||||||
Text(
|
|
||||||
"Already have an account?",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 16, color: Colors.grey[600]),
|
|
||||||
),
|
|
||||||
SizedBox(height: 10),
|
|
||||||
SizedBox(
|
|
||||||
width: screenwidth / 1.3,
|
|
||||||
child: ElevatedButton(
|
|
||||||
onPressed: () {
|
|
||||||
// Add your login logic here
|
|
||||||
},
|
|
||||||
style: ElevatedButton.styleFrom(
|
|
||||||
backgroundColor: Color(
|
|
||||||
0xFF82AFCB), // Blueish color for Login
|
|
||||||
shape: RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.circular(10),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
// child: Row(
|
|
||||||
// mainAxisSize: MainAxisSize.min,
|
|
||||||
// children: [
|
|
||||||
// Text(
|
|
||||||
// "Login",
|
|
||||||
// style: TextStyle(
|
|
||||||
// fontSize: 16, color: Colors.white
|
|
||||||
// ),
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// ),
|
|
||||||
// SizedBox(width: 8),
|
|
||||||
// Icon(Icons.arrow_forward,
|
|
||||||
// color: Colors.white),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
|
|
||||||
child: GestureDetector(
|
|
||||||
onTap: () {
|
|
||||||
// Navigate to LoginRoute
|
|
||||||
Navigator.push(
|
|
||||||
context,
|
|
||||||
MaterialPageRoute(
|
|
||||||
builder: (context) => LoginRoute()),
|
|
||||||
// MaterialPageRoute(builder: (context) => LoginRoute(userId: userID)),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
child: Row(
|
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
"Login",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 16,
|
|
||||||
color: Colors.white,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(width: 8),
|
|
||||||
Icon(Icons.arrow_forward,
|
|
||||||
color: Colors.white),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(
|
|
||||||
height: 10,
|
|
||||||
),
|
|
||||||
Center(
|
|
||||||
child: Container(
|
|
||||||
height: screenheight / 8,
|
|
||||||
width: screenwidth / 2,
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
image: DecorationImage(
|
|
||||||
image: AssetImage(
|
|
||||||
"assets/splash_screen/logo.png"), // Background image asset
|
|
||||||
fit: BoxFit.fill,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
))
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -235,7 +235,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
|
|||||||
leading: IconButton(
|
leading: IconButton(
|
||||||
icon: Icon(Icons.arrow_back_ios_new, color: Colors.black),
|
icon: Icon(Icons.arrow_back_ios_new, color: Colors.black),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
print("Back Button");
|
context.go('/myhomepage');
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
title: Text(
|
title: Text(
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
48
pubspec.lock
48
pubspec.lock
@ -414,10 +414,10 @@ packages:
|
|||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: flutter_launcher_icons
|
name: flutter_launcher_icons
|
||||||
sha256: "619817c4b65b322b5104b6bb6dfe6cda62d9729bd7ad4303ecc8b4e690a67a77"
|
sha256: "31cd0885738e87c72d6f055564d37fabcdacee743b396b78c7636c169cac64f5"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.14.1"
|
version: "0.14.2"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -573,10 +573,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: go_router
|
name: go_router
|
||||||
sha256: "8660b74171fafae4aa8202100fa2e55349e078281dadc73a241eb8e758534d9d"
|
sha256: "2fd11229f59e23e967b0775df8d5948a519cd7e1e8b6e849729e010587b46539"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.6.1"
|
version: "14.6.2"
|
||||||
graphs:
|
graphs:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -733,10 +733,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: io
|
name: io
|
||||||
sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e"
|
sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.0.5"
|
||||||
js:
|
js:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -821,10 +821,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: mailer
|
name: mailer
|
||||||
sha256: "21fde1497c79f402cb5fa7c50abd58927d360139e492546c941ee10767684fac"
|
sha256: e907087cd00719898c493f720dd326af73b00b406ab4af8e79f15d7c5fc24035
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.2.0"
|
version: "6.3.0"
|
||||||
marquee:
|
marquee:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -861,10 +861,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: mime
|
name: mime
|
||||||
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
|
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.6"
|
version: "2.0.0"
|
||||||
nested:
|
nested:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -877,10 +877,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: package_config
|
name: package_config
|
||||||
sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd"
|
sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.1"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -901,18 +901,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_android
|
name: path_provider_android
|
||||||
sha256: "8c4967f8b7cb46dc914e178daa29813d83ae502e0529d7b0478330616a691ef7"
|
sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.14"
|
version: "2.2.15"
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_foundation
|
name: path_provider_foundation
|
||||||
sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16
|
sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.0"
|
version: "2.4.1"
|
||||||
path_provider_linux:
|
path_provider_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -989,10 +989,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: pub_semver
|
name: pub_semver
|
||||||
sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c"
|
sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.4"
|
version: "2.1.5"
|
||||||
pubspec_parse:
|
pubspec_parse:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1100,10 +1100,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_android
|
name: shared_preferences_android
|
||||||
sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab"
|
sha256: "7f172d1b06de5da47b6264c2692ee2ead20bbbc246690427cdb4fc301cd0c549"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.3"
|
version: "2.3.4"
|
||||||
shared_preferences_foundation:
|
shared_preferences_foundation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1272,10 +1272,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: timing
|
name: timing
|
||||||
sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32"
|
sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.1"
|
version: "1.0.2"
|
||||||
typed_data:
|
typed_data:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1360,10 +1360,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: video_player_avfoundation
|
name: video_player_avfoundation
|
||||||
sha256: "0b146e5d82e886ff43e5a46c6bcbe390761b802864a6e2503eb612d69a405dfa"
|
sha256: "33224c19775fd244be2d6e3dbd8e1826ab162877bd61123bf71890772119a2b7"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.6.3"
|
version: "2.6.5"
|
||||||
video_player_platform_interface:
|
video_player_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user