forked from eatvio/eatvio_app
feat(auth): password visibility
This commit is contained in:
@@ -85,12 +85,8 @@ class _BlogPostCreateScreenState extends State<BlogPostCreateScreen> {
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
),
|
||||
backgroundColor: state.image != null || state.title!.text.isNotEmpty || state.description!.text.isNotEmpty || state.youtubeURL!.text.isNotEmpty
|
||||
? appTheme.blueA400
|
||||
: Colors.grey,
|
||||
onPressed: state.image != null || state.title!.text.isNotEmpty || state.description!.text.isNotEmpty || state.youtubeURL!.text.isNotEmpty
|
||||
? () => _submitForm(context, state.title!.text, state.description!.text, state.youtubeURL!.text)
|
||||
: null,
|
||||
backgroundColor: appTheme.blueA400,
|
||||
onPressed: () => _submitForm(context, state.title!.text, state.description!.text, state.youtubeURL!.text),
|
||||
label: Text(
|
||||
'Создать',
|
||||
style: theme.textTheme.titleSmall,
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:retrofit/retrofit.dart';
|
||||
|
||||
part 'blog_post_service.g.dart';
|
||||
|
||||
@RestApi()
|
||||
abstract class BlogPostService {
|
||||
factory BlogPostService(Dio dio, {String baseUrl}) = _BlogPostService;
|
||||
|
||||
@POST('/api/blogPosts/create')
|
||||
@MultiPart()
|
||||
Future<void> sendMessage({
|
||||
@Path() String? title,
|
||||
@Path() required String state,
|
||||
@Path() String? description,
|
||||
@Part() String? youtube_url,
|
||||
@Part(name: 'image', contentType: 'multipart/form-data') List<MultipartFile>? media_data,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'blog_post_service.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RetrofitGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// ignore_for_file: unnecessary_brace_in_string_interps,no_leading_underscores_for_local_identifiers,unused_element
|
||||
|
||||
class _BlogPostService implements BlogPostService {
|
||||
_BlogPostService(
|
||||
this._dio, {
|
||||
this.baseUrl,
|
||||
this.errorLogger,
|
||||
});
|
||||
|
||||
final Dio _dio;
|
||||
|
||||
String? baseUrl;
|
||||
|
||||
final ParseErrorLogger? errorLogger;
|
||||
|
||||
@override
|
||||
Future<void> sendMessage({
|
||||
String? title,
|
||||
required String state,
|
||||
String? description,
|
||||
String? youtube_url,
|
||||
List<MultipartFile>? media_data,
|
||||
}) async {
|
||||
final _extra = <String, dynamic>{};
|
||||
final queryParameters = <String, dynamic>{};
|
||||
queryParameters.removeWhere((k, v) => v == null);
|
||||
final _headers = <String, dynamic>{};
|
||||
final _data = FormData();
|
||||
if (youtube_url != null) {
|
||||
_data.fields.add(MapEntry(
|
||||
'youtube_url',
|
||||
youtube_url,
|
||||
));
|
||||
}
|
||||
if (media_data != null) {
|
||||
_data.files.addAll(media_data.map((i) => MapEntry('image', i)));
|
||||
}
|
||||
final _options = _setStreamType<void>(Options(
|
||||
method: 'POST',
|
||||
headers: _headers,
|
||||
extra: _extra,
|
||||
contentType: 'multipart/form-data',
|
||||
)
|
||||
.compose(
|
||||
_dio.options,
|
||||
'/api/blogPosts/create',
|
||||
queryParameters: queryParameters,
|
||||
data: _data,
|
||||
)
|
||||
.copyWith(
|
||||
baseUrl: _combineBaseUrls(
|
||||
_dio.options.baseUrl,
|
||||
baseUrl,
|
||||
)));
|
||||
await _dio.fetch<void>(_options);
|
||||
}
|
||||
|
||||
RequestOptions _setStreamType<T>(RequestOptions requestOptions) {
|
||||
if (T != dynamic &&
|
||||
!(requestOptions.responseType == ResponseType.bytes ||
|
||||
requestOptions.responseType == ResponseType.stream)) {
|
||||
if (T == String) {
|
||||
requestOptions.responseType = ResponseType.plain;
|
||||
} else {
|
||||
requestOptions.responseType = ResponseType.json;
|
||||
}
|
||||
}
|
||||
return requestOptions;
|
||||
}
|
||||
|
||||
String _combineBaseUrls(
|
||||
String dioBaseUrl,
|
||||
String? baseUrl,
|
||||
) {
|
||||
if (baseUrl == null || baseUrl.trim().isEmpty) {
|
||||
return dioBaseUrl;
|
||||
}
|
||||
|
||||
final url = Uri.parse(baseUrl);
|
||||
|
||||
if (url.isAbsolute) {
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
return Uri.parse(dioBaseUrl).resolveUri(url).toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class AdditionalSettingsScreen extends StatefulWidget {
|
||||
const AdditionalSettingsScreen({super.key});
|
||||
|
||||
@override
|
||||
State<AdditionalSettingsScreen> createState() => _AdditionalSettingsScreenState();
|
||||
}
|
||||
|
||||
class _AdditionalSettingsScreenState extends State<AdditionalSettingsScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Placeholder();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class CertificatesAndDiplomsScreen extends StatefulWidget {
|
||||
const CertificatesAndDiplomsScreen({super.key});
|
||||
|
||||
@override
|
||||
State<CertificatesAndDiplomsScreen> createState() => _CertificatesAndDiplomsScreenState();
|
||||
}
|
||||
|
||||
class _CertificatesAndDiplomsScreenState extends State<CertificatesAndDiplomsScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Placeholder();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class LastStepScreen extends StatefulWidget {
|
||||
const LastStepScreen({super.key});
|
||||
|
||||
@override
|
||||
State<LastStepScreen> createState() => _LastStepScreenState();
|
||||
}
|
||||
|
||||
class _LastStepScreenState extends State<LastStepScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Placeholder();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class PhotoOrScansScreen extends StatefulWidget {
|
||||
const PhotoOrScansScreen({super.key});
|
||||
|
||||
@override
|
||||
State<PhotoOrScansScreen> createState() => _PhotoOrScansScreenState();
|
||||
}
|
||||
|
||||
class _PhotoOrScansScreenState extends State<PhotoOrScansScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Placeholder();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class RegistrationAsScreen extends StatefulWidget {
|
||||
const RegistrationAsScreen({super.key});
|
||||
|
||||
@override
|
||||
State<RegistrationAsScreen> createState() => _RegistrationAsScreenState();
|
||||
}
|
||||
|
||||
class _RegistrationAsScreenState extends State<RegistrationAsScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Placeholder();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class SocialNetworksScreen extends StatefulWidget {
|
||||
const SocialNetworksScreen({super.key});
|
||||
|
||||
@override
|
||||
State<SocialNetworksScreen> createState() => _SocialNetworksScreenState();
|
||||
}
|
||||
|
||||
class _SocialNetworksScreenState extends State<SocialNetworksScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return const Placeholder();
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,10 @@
|
||||
import 'package:eatvio_app/core/utils/image_constant.dart';
|
||||
import 'package:eatvio_app/features/consultant/become_consultant/pages/additional_settings_screen.dart';
|
||||
import 'package:eatvio_app/features/consultant/become_consultant/pages/certificates_and_diploms_screen.dart';
|
||||
import 'package:eatvio_app/features/consultant/become_consultant/pages/last_step_screen.dart';
|
||||
import 'package:eatvio_app/features/consultant/become_consultant/pages/photo_or_scans_screen.dart';
|
||||
import 'package:eatvio_app/features/consultant/become_consultant/pages/registration_as_screen.dart';
|
||||
import 'package:eatvio_app/features/consultant/become_consultant/pages/social_networks_screen.dart';
|
||||
import 'package:eatvio_app/theme/theme_helper.dart';
|
||||
import 'package:eatvio_app/widgets/app_bar/appbar_title_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -126,12 +132,12 @@ class _StepperBecomeConsultantScreenState extends State<StepperBecomeConsultantS
|
||||
});
|
||||
},
|
||||
children: [
|
||||
Container(),
|
||||
Container(),
|
||||
Container(),
|
||||
Container(),
|
||||
Container(),
|
||||
Container(),
|
||||
CertificatesAndDiplomsScreen(),
|
||||
PhotoOrScansScreen(),
|
||||
AdditionalSettingsScreen(),
|
||||
SocialNetworksScreen(),
|
||||
RegistrationAsScreen(),
|
||||
LastStepScreen(),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
@@ -37,6 +37,7 @@ class AuthScreen extends StatefulWidget {
|
||||
|
||||
class _AuthScreenState extends State<AuthScreen> {
|
||||
bool checkboxState = false;
|
||||
bool hidePassword = true;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -73,9 +74,20 @@ class _AuthScreenState extends State<AuthScreen> {
|
||||
selector: (state) => state.passwordController,
|
||||
builder: (context, passwordController) {
|
||||
return CustomTextFormField(
|
||||
obscureText: true,
|
||||
obscureText: hidePassword,
|
||||
controller: passwordController,
|
||||
hintText: 'Введите пароль',
|
||||
suffix: IconButton(
|
||||
onPressed: () {
|
||||
setState(() {
|
||||
hidePassword = !hidePassword;
|
||||
});
|
||||
},
|
||||
icon: Icon(
|
||||
hidePassword ? Icons.visibility_outlined : Icons.visibility_off_outlined,
|
||||
color: Colors.grey,
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user