Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT] Adiciona padrões visuais a serem utilizados durante o código (#58) #42

Open
wants to merge 2 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion lib/ui/login/view/LoginView.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:aranduapp/core/log/Log.dart';
import 'package:aranduapp/ui/home/view/HomeView.dart';
import 'package:aranduapp/ui/shared/TextAndLink.dart';
import 'package:aranduapp/ui/shared/arabescos.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
Expand Down Expand Up @@ -106,7 +107,14 @@ class _LoginState extends State<_Login> {
return SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const Row(
mainAxisSize: MainAxisSize.min,
children: [
TrianglesAndRhombus(),
],
),
const SizedBox(height: 80),
const TitleSlogan(),
const SizedBox(height: 80),
Expand Down Expand Up @@ -154,7 +162,7 @@ class _LoginState extends State<_Login> {
onTap: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => RecoverAccount(),
builder: (context) => const RecoverAccount(),
),
);
},
Expand Down
43 changes: 16 additions & 27 deletions lib/ui/login/viewModel/LoginViewModel.dart
Original file line number Diff line number Diff line change
@@ -1,33 +1,26 @@

import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart';
import 'package:aranduapp/ui/login/service/LoginService.dart';
import 'package:aranduapp/ui/login/model/LoginRequest.dart';

import 'package:aranduapp/ui/home/view/HomeView.dart';

class LoginViewModel extends ChangeNotifier {

final BuildContext context;

bool isLoading;

final GlobalKey<FormState> formKey;
final TextEditingController emailController;
final TextEditingController passwordController;

LoginViewModel(this.context) :
isLoading = false,
formKey = GlobalKey<FormState>(),
emailController = TextEditingController(),
passwordController = TextEditingController();
LoginViewModel(this.context)
: isLoading = false,
formKey = GlobalKey<FormState>(),
emailController = TextEditingController(),
passwordController = TextEditingController();



Future<void> loginWithEmailAndPassword() async {

// TODO use mutex to make this
if (isLoading){
if (isLoading) {
return;
}

Expand All @@ -39,8 +32,8 @@ class LoginViewModel extends ChangeNotifier {
throw Exception('Valores inválidos');
}

await LoginService.login(LoginRequest(emailController.text, passwordController.text));

await LoginService.login(
LoginRequest(emailController.text, passwordController.text));
} catch (e) {
rethrow;
} finally {
Expand All @@ -55,16 +48,12 @@ class LoginViewModel extends ChangeNotifier {
throw UnimplementedError();
}

Future<void> loginWithDeviceAuth() async {
bool value = await LocalAuthentication().authenticate(
localizedReason: 'Toque com o dedo no sensor para logar');

if (!value)
throw Exception();

}


Future<void> loginWithDeviceAuth() async {
bool value = await LocalAuthentication()
.authenticate(localizedReason: 'Toque com o dedo no sensor para logar');

if (!value) {
throw Exception();
}
}
}

8 changes: 7 additions & 1 deletion lib/ui/register_account/view/RegisterAccount.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:aranduapp/ui/login/view/LoginView.dart';
import 'package:aranduapp/ui/shared/OrDivider.dart';
import 'package:aranduapp/ui/shared/TextAndLink.dart';
import 'package:aranduapp/ui/shared/TextName.dart';
import 'package:aranduapp/ui/shared/arabescos.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:aranduapp/core/log/Log.dart';
Expand Down Expand Up @@ -46,6 +46,12 @@ class _RegisterAccountState extends State<_RegisterAccount> {
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
const Row(
mainAxisSize: MainAxisSize.min,
children: [
TrianglesAndRhombus(),
],
),
const SizedBox(height: 80),
const TitleSlogan(),
const SizedBox(height: 10),
Expand Down
31 changes: 31 additions & 0 deletions lib/ui/shared/CustomInputDecoration.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import 'package:flutter/material.dart';

InputDecoration customInputDecoration({
required String labelText,
Widget? prefixIcon,
GestureDetector? suffixIcon,
}) {
return InputDecoration(
labelText: labelText,
prefixIcon: prefixIcon,
suffixIcon: suffixIcon,
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(14.0),
borderSide: const BorderSide(color: Colors.transparent),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(14.0),
borderSide: const BorderSide(color: Colors.transparent),
),
errorBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.red, width: 2.0),
borderRadius: BorderRadius.circular(14.0),
),
focusedErrorBorder: OutlineInputBorder(
borderSide: const BorderSide(color: Colors.redAccent, width: 2.0),
borderRadius: BorderRadius.circular(14.0),
),
filled: true,
fillColor: const Color.fromARGB(255, 44, 44, 44),
);
}
30 changes: 12 additions & 18 deletions lib/ui/shared/TextEmail.dart
Original file line number Diff line number Diff line change
@@ -1,35 +1,29 @@
import 'package:aranduapp/ui/shared/CustomInputDecoration.dart';
import 'package:flutter/material.dart';

class TextEmail extends StatelessWidget{


class TextEmail extends StatelessWidget {
final TextEditingController controller;
final EdgeInsetsGeometry padding;

static final RegExp emailRegex = RegExp(r'^[\w-\.]+@([\w-]+\.)+\w{2,4}$');


const TextEmail ({
super.key,
required this.padding,
required this.controller
});

static final RegExp emailRegex = RegExp(r'^[\w-\.]+@([\w-]+\.)+\w{2,4}$');

const TextEmail({super.key, required this.padding, required this.controller});

@override
Widget build(BuildContext context) {
return Padding(
padding: padding,
padding: padding,
child: TextFormField(
validator: (value) => value == null|| emailRegex.hasMatch(value) ? null : 'E-mail inválido',
validator: (value) => value == null || emailRegex.hasMatch(value)
? null
: 'E-mail inválido',
controller: controller,
decoration: InputDecoration (
prefixIcon: Icon ( Icons.email_outlined, color: Theme.of(context).colorScheme.primary),
labelText: 'E-mail'
decoration: customInputDecoration(
prefixIcon: Icon(Icons.email_outlined,
color: Theme.of(context).colorScheme.primary),
labelText: 'E-mail',
),
),
);
}

}
10 changes: 6 additions & 4 deletions lib/ui/shared/TextName.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:aranduapp/ui/shared/CustomInputDecoration.dart';
import 'package:flutter/material.dart';

class TextName extends StatelessWidget {
Expand All @@ -20,10 +21,11 @@ class TextName extends StatelessWidget {
validator: (value) =>
value == null || value.trim().length < 3 ? '$label inválido' : null,
controller: controller,
decoration: InputDecoration(
prefixIcon: Icon(Icons.person_outline,
color: Theme.of(context).colorScheme.primary),
labelText: label),
decoration: customInputDecoration(
prefixIcon: Icon(Icons.person_outline,
color: Theme.of(context).colorScheme.primary),
labelText: label,
),
),
);
}
Expand Down
54 changes: 24 additions & 30 deletions lib/ui/shared/TextPassword.dart
Original file line number Diff line number Diff line change
@@ -1,56 +1,50 @@
import 'package:aranduapp/ui/shared/CustomInputDecoration.dart';
import 'package:flutter/material.dart';

class TextPassWord extends StatefulWidget {

final TextEditingController controller;
final EdgeInsetsGeometry padding;

const TextPassWord ({
super.key,
required this.padding,
required this.controller
});

const TextPassWord(
{super.key, required this.padding, required this.controller});

@override
State<StatefulWidget> createState() {
return _TextPassWord();
}
}
}


class _TextPassWord extends State<TextPassWord> {
bool _hidePassord = true;

@override
Widget build(BuildContext context) {

return
Padding(
padding: widget.padding,
child: TextFormField(
return Padding(
padding: widget.padding,
child: TextFormField(
validator: (value) {
if (value == null || value.isEmpty || value.length < 8) {
return 'Senha inválida';
}
return null;
},
controller: widget.controller,
obscureText: _hidePassord,
decoration: InputDecoration (
prefixIcon: Icon ( Icons.lock_outline, color: Theme.of(context).colorScheme.primary),
suffixIcon: GestureDetector (
onTap: () => setState(() { _hidePassord = !_hidePassord; }),
child: Icon(
_hidePassord ? Icons.visibility_off_outlined : Icons.visibility_outlined,
color: Theme.of(context).colorScheme.primary
)
),
labelText: 'Senha'
),
obscureText: _hidePassord,
decoration: customInputDecoration(
prefixIcon: Icon(Icons.lock_outline,
color: Theme.of(context).colorScheme.primary),
suffixIcon: GestureDetector(
onTap: () => setState(() {
_hidePassord = !_hidePassord;
}),
child: Icon(
_hidePassord
? Icons.visibility_off_outlined
: Icons.visibility_outlined,
color: Theme.of(context).colorScheme.primary)),
labelText: 'Senha',
),
);


}
),
);
}
}
82 changes: 82 additions & 0 deletions lib/ui/shared/arabescos.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import 'package:flutter/material.dart';

class TrianglesAndRhombus extends StatelessWidget {
const TrianglesAndRhombus({Key? key}) : super(key: key);

@override
Widget build(BuildContext context) {
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: _buildPattern(10),
),
],
);
}

List<Widget> _buildPattern(int count) {
List<Widget> widgets = [];
for (int i = 0; i < count; i++) {
if (i % 2 == 0) {
widgets.add(CustomPaint(
size: const Size(40, 40),
painter: RhombusPainter(offset: 8),
));
} else {
widgets.add(CustomPaint(
size: const Size(40, 20),
painter: InvertedTrianglePainter(),
));
}
}
return widgets;
}
}

class RhombusPainter extends CustomPainter {
final double offset;

RhombusPainter({required this.offset});

@override
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = Colors.grey.shade800
..style = PaintingStyle.fill;

final path = Path();

path.moveTo(size.width / 2, offset);
path.lineTo(size.width, size.height / 2 + offset);
path.lineTo(size.width / 2, size.height + offset);
path.lineTo(0, size.height / 2 + offset);
path.close();

canvas.drawPath(path, paint);
}

@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}

class InvertedTrianglePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = Colors.grey.shade800
..style = PaintingStyle.fill;

final path = Path();

path.moveTo(0, 0);
path.lineTo(size.width, 0);
path.lineTo(size.width / 2, size.height);
path.close();

canvas.drawPath(path, paint);
}

@override
bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
}
Loading