Merge remote-tracking branch 'refs/remotes/origin/calendar'

# Conflicts:
#	lib/app_router.dart
#	lib/features/calendar/services/calendar_service.dart
#	lib/features/diary/presentation/bloc/diary_bloc.dart
#	lib/features/diary/services/diary_service.dart
#	lib/locator_service.dart
#	lib/main.dart
This commit is contained in:
mso7nueh
2024-07-31 13:49:24 +03:00
18 changed files with 312 additions and 627 deletions

View File

@@ -6,14 +6,8 @@ part 'calendar_model.g.dart';
@freezed
class CalendarModel with _$CalendarModel {
const factory CalendarModel({
required int id,
required String state,
required String image,
required String description,
@JsonKey(name: "youtube_url") required String youtubeUrl,
@JsonKey(name: "created_at") required DateTime createdAt,
@JsonKey(name: "updated_at") required DateTime updatedAt,
required String title,
required String date,
Object? diary,
}) = _CalendarModel;
factory CalendarModel.fromJson(Map<String, Object?> json) =>

View File

@@ -20,17 +20,8 @@ CalendarModel _$CalendarModelFromJson(Map<String, dynamic> json) {
/// @nodoc
mixin _$CalendarModel {
int get id => throw _privateConstructorUsedError;
String get state => throw _privateConstructorUsedError;
String get image => throw _privateConstructorUsedError;
String get description => throw _privateConstructorUsedError;
@JsonKey(name: "youtube_url")
String get youtubeUrl => throw _privateConstructorUsedError;
@JsonKey(name: "created_at")
DateTime get createdAt => throw _privateConstructorUsedError;
@JsonKey(name: "updated_at")
DateTime get updatedAt => throw _privateConstructorUsedError;
String get title => throw _privateConstructorUsedError;
String get date => throw _privateConstructorUsedError;
Object? get diary => throw _privateConstructorUsedError;
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
@JsonKey(ignore: true)
@@ -44,15 +35,7 @@ abstract class $CalendarModelCopyWith<$Res> {
CalendarModel value, $Res Function(CalendarModel) then) =
_$CalendarModelCopyWithImpl<$Res, CalendarModel>;
@useResult
$Res call(
{int id,
String state,
String image,
String description,
@JsonKey(name: "youtube_url") String youtubeUrl,
@JsonKey(name: "created_at") DateTime createdAt,
@JsonKey(name: "updated_at") DateTime updatedAt,
String title});
$Res call({String date, Object? diary});
}
/// @nodoc
@@ -68,48 +51,15 @@ class _$CalendarModelCopyWithImpl<$Res, $Val extends CalendarModel>
@pragma('vm:prefer-inline')
@override
$Res call({
Object? id = null,
Object? state = null,
Object? image = null,
Object? description = null,
Object? youtubeUrl = null,
Object? createdAt = null,
Object? updatedAt = null,
Object? title = null,
Object? date = null,
Object? diary = freezed,
}) {
return _then(_value.copyWith(
id: null == id
? _value.id
: id // ignore: cast_nullable_to_non_nullable
as int,
state: null == state
? _value.state
: state // ignore: cast_nullable_to_non_nullable
as String,
image: null == image
? _value.image
: image // ignore: cast_nullable_to_non_nullable
as String,
description: null == description
? _value.description
: description // ignore: cast_nullable_to_non_nullable
as String,
youtubeUrl: null == youtubeUrl
? _value.youtubeUrl
: youtubeUrl // ignore: cast_nullable_to_non_nullable
as String,
createdAt: null == createdAt
? _value.createdAt
: createdAt // ignore: cast_nullable_to_non_nullable
as DateTime,
updatedAt: null == updatedAt
? _value.updatedAt
: updatedAt // ignore: cast_nullable_to_non_nullable
as DateTime,
title: null == title
? _value.title
: title // ignore: cast_nullable_to_non_nullable
date: null == date
? _value.date
: date // ignore: cast_nullable_to_non_nullable
as String,
diary: freezed == diary ? _value.diary : diary,
) as $Val);
}
}
@@ -122,15 +72,7 @@ abstract class _$$CalendarModelImplCopyWith<$Res>
__$$CalendarModelImplCopyWithImpl<$Res>;
@override
@useResult
$Res call(
{int id,
String state,
String image,
String description,
@JsonKey(name: "youtube_url") String youtubeUrl,
@JsonKey(name: "created_at") DateTime createdAt,
@JsonKey(name: "updated_at") DateTime updatedAt,
String title});
$Res call({String date, Object? diary});
}
/// @nodoc
@@ -144,48 +86,15 @@ class __$$CalendarModelImplCopyWithImpl<$Res>
@pragma('vm:prefer-inline')
@override
$Res call({
Object? id = null,
Object? state = null,
Object? image = null,
Object? description = null,
Object? youtubeUrl = null,
Object? createdAt = null,
Object? updatedAt = null,
Object? title = null,
Object? date = null,
Object? diary = freezed,
}) {
return _then(_$CalendarModelImpl(
id: null == id
? _value.id
: id // ignore: cast_nullable_to_non_nullable
as int,
state: null == state
? _value.state
: state // ignore: cast_nullable_to_non_nullable
as String,
image: null == image
? _value.image
: image // ignore: cast_nullable_to_non_nullable
as String,
description: null == description
? _value.description
: description // ignore: cast_nullable_to_non_nullable
as String,
youtubeUrl: null == youtubeUrl
? _value.youtubeUrl
: youtubeUrl // ignore: cast_nullable_to_non_nullable
as String,
createdAt: null == createdAt
? _value.createdAt
: createdAt // ignore: cast_nullable_to_non_nullable
as DateTime,
updatedAt: null == updatedAt
? _value.updatedAt
: updatedAt // ignore: cast_nullable_to_non_nullable
as DateTime,
title: null == title
? _value.title
: title // ignore: cast_nullable_to_non_nullable
date: null == date
? _value.date
: date // ignore: cast_nullable_to_non_nullable
as String,
diary: freezed == diary ? _value.diary : diary,
));
}
}
@@ -193,42 +102,19 @@ class __$$CalendarModelImplCopyWithImpl<$Res>
/// @nodoc
@JsonSerializable()
class _$CalendarModelImpl implements _CalendarModel {
const _$CalendarModelImpl(
{required this.id,
required this.state,
required this.image,
required this.description,
@JsonKey(name: "youtube_url") required this.youtubeUrl,
@JsonKey(name: "created_at") required this.createdAt,
@JsonKey(name: "updated_at") required this.updatedAt,
required this.title});
const _$CalendarModelImpl({required this.date, this.diary});
factory _$CalendarModelImpl.fromJson(Map<String, dynamic> json) =>
_$$CalendarModelImplFromJson(json);
@override
final int id;
final String date;
@override
final String state;
@override
final String image;
@override
final String description;
@override
@JsonKey(name: "youtube_url")
final String youtubeUrl;
@override
@JsonKey(name: "created_at")
final DateTime createdAt;
@override
@JsonKey(name: "updated_at")
final DateTime updatedAt;
@override
final String title;
final Object? diary;
@override
String toString() {
return 'CalendarModel(id: $id, state: $state, image: $image, description: $description, youtubeUrl: $youtubeUrl, createdAt: $createdAt, updatedAt: $updatedAt, title: $title)';
return 'CalendarModel(date: $date, diary: $diary)';
}
@override
@@ -236,24 +122,14 @@ class _$CalendarModelImpl implements _CalendarModel {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$CalendarModelImpl &&
(identical(other.id, id) || other.id == id) &&
(identical(other.state, state) || other.state == state) &&
(identical(other.image, image) || other.image == image) &&
(identical(other.description, description) ||
other.description == description) &&
(identical(other.youtubeUrl, youtubeUrl) ||
other.youtubeUrl == youtubeUrl) &&
(identical(other.createdAt, createdAt) ||
other.createdAt == createdAt) &&
(identical(other.updatedAt, updatedAt) ||
other.updatedAt == updatedAt) &&
(identical(other.title, title) || other.title == title));
(identical(other.date, date) || other.date == date) &&
const DeepCollectionEquality().equals(other.diary, diary));
}
@JsonKey(ignore: true)
@override
int get hashCode => Object.hash(runtimeType, id, state, image, description,
youtubeUrl, createdAt, updatedAt, title);
int get hashCode => Object.hash(
runtimeType, date, const DeepCollectionEquality().hash(diary));
@JsonKey(ignore: true)
@override
@@ -271,37 +147,15 @@ class _$CalendarModelImpl implements _CalendarModel {
abstract class _CalendarModel implements CalendarModel {
const factory _CalendarModel(
{required final int id,
required final String state,
required final String image,
required final String description,
@JsonKey(name: "youtube_url") required final String youtubeUrl,
@JsonKey(name: "created_at") required final DateTime createdAt,
@JsonKey(name: "updated_at") required final DateTime updatedAt,
required final String title}) = _$CalendarModelImpl;
{required final String date, final Object? diary}) = _$CalendarModelImpl;
factory _CalendarModel.fromJson(Map<String, dynamic> json) =
_$CalendarModelImpl.fromJson;
@override
int get id;
String get date;
@override
String get state;
@override
String get image;
@override
String get description;
@override
@JsonKey(name: "youtube_url")
String get youtubeUrl;
@override
@JsonKey(name: "created_at")
DateTime get createdAt;
@override
@JsonKey(name: "updated_at")
DateTime get updatedAt;
@override
String get title;
Object? get diary;
@override
@JsonKey(ignore: true)
_$$CalendarModelImplCopyWith<_$CalendarModelImpl> get copyWith =>

View File

@@ -8,24 +8,12 @@ part of 'calendar_model.dart';
_$CalendarModelImpl _$$CalendarModelImplFromJson(Map<String, dynamic> json) =>
_$CalendarModelImpl(
id: (json['id'] as num).toInt(),
state: json['state'] as String,
image: json['image'] as String,
description: json['description'] as String,
youtubeUrl: json['youtube_url'] as String,
createdAt: DateTime.parse(json['created_at'] as String),
updatedAt: DateTime.parse(json['updated_at'] as String),
title: json['title'] as String,
date: json['date'] as String,
diary: json['diary'],
);
Map<String, dynamic> _$$CalendarModelImplToJson(_$CalendarModelImpl instance) =>
<String, dynamic>{
'id': instance.id,
'state': instance.state,
'image': instance.image,
'description': instance.description,
'youtube_url': instance.youtubeUrl,
'created_at': instance.createdAt.toIso8601String(),
'updated_at': instance.updatedAt.toIso8601String(),
'title': instance.title,
'date': instance.date,
'diary': instance.diary,
};

View File

@@ -0,0 +1,164 @@
// ignore_for_file: unused_local_variable
import 'package:eatvio_app/features/calendar/models/calendar_model.dart';
import 'package:eatvio_app/features/calendar/presentation/bloc/calendar_cubit.dart';
import 'package:eatvio_app/features/calendar/presentation/bloc/calendar_state.dart';
import 'package:eatvio_app/core/app_export.dart';
import 'package:go_router/go_router.dart';
import 'package:table_calendar/table_calendar.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
// ignore: must_be_immutable
class CalendarScreen extends StatelessWidget {
CalendarScreen({Key? key}) : super(key: key);
Widget build(BuildContext context) {
return BlocBuilder<CalendarCubit, CalendarState>(
builder: (context, state) {
if (state is CalendarStateLoaded) {
return _buildCalendar(context, state);
} else if (state is CalendarStateLoading) {
return Scaffold(
body: Center(
child: CupertinoActivityIndicator(),
),
);
} else if (state is CalendarStateError) {
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(16),
child: Center(
child: Text(state.errorMessage),
),
),
);
} else
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(16),
child: Center(
child: Text("Неопределенная ошибка"),
),
),
);
},
);
}
Widget _buildCalendar(BuildContext context, CalendarStateLoaded state) {
return Stack(alignment: Alignment.bottomCenter, children: [
FormBuilder(
child: Scaffold(
appBar: AppBar(
toolbarHeight: 0,
automaticallyImplyLeading: false,
),
backgroundColor: Color.fromARGB(255, 240, 242, 245),
resizeToAvoidBottomInset: true,
body: SizedBox(
width: double.maxFinite,
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Padding(
padding: EdgeInsets.only(bottom: 5.v),
child: Column(
children: [
SizedBox(height: 20.v),
_buildCalendarBody(context, state),
SizedBox(height: 20.v),
],
),
),
),
),
],
),
),
),
),
]);
}
_buildCalendarBody(BuildContext context, CalendarStateLoaded state) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 16.h, vertical: 16.h),
padding: EdgeInsets.symmetric(
horizontal: 24.h,
vertical: 12.v,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: const BorderRadius.all(Radius.circular(12)),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 2,
blurRadius: 5,
offset: Offset(0, 3),
),
],
),
child: TableCalendar(
locale: 'ru_RU',
firstDay: DateTime.utc(2010, 10, 16),
lastDay: DateTime.utc(2030, 3, 14),
focusedDay: DateTime.now(),
startingDayOfWeek: StartingDayOfWeek.monday,
calendarBuilders: CalendarBuilders(
selectedBuilder: (context, day, focusedDay) =>
_buildCellDate(context, day, focusedDay: focusedDay, state),
defaultBuilder: (context, day, focusedDay) =>
_buildCellDate(context, day, state),
todayBuilder: (context, day, focusedDay) =>
_buildCellDate(context, day, state),
),
),
);
}
}
Widget _buildCellDate(
BuildContext context, DateTime day, CalendarStateLoaded state,
{DateTime? focusedDay}) {
final String dayString = day.toIso8601String().split('T').first;
final List<CalendarModel> calendarModels = state.calendarList;
// Находим первую модель, соответствующую дате
final CalendarModel model = calendarModels.firstWhere(
(model) => model.date == dayString,
orElse: () => CalendarModel(date: dayString, diary: {}));
Color? bgclr; // Объявляем переменную bgclr здесь
final Map<String, dynamic> diary = model.diary as Map<String, dynamic>;
if (model.diary is Map<String, dynamic>) {
if (diary['state'] == "started") {
bgclr = Colors.grey;
} else if (diary['state'] == "finished") {
bgclr = Colors.green;
} else {
bgclr = Colors.white;
}
} else {
bgclr = Colors.white; // Значение по умолчанию, если diary не является Map
}
return GestureDetector(
onTap: () => GoRouter.of(context).pushNamed(
'diaryScreen',
extra: diary['id'],
),
child: Container(
margin: const EdgeInsets.all(5),
alignment: Alignment.center,
decoration: BoxDecoration(
shape: (day == focusedDay) ? BoxShape.circle : BoxShape.rectangle,
color: bgclr,
borderRadius: (day == focusedDay) ? null : BorderRadius.circular(4),
),
child: Text(day.day.toString(), style: TextStyle(color: Colors.black)),
));
}

View File

@@ -8,10 +8,7 @@ class CalendarRepository {
Future<List<CalendarModel>> getCalendar() async {
try {
return (await calendarService.getCalendar())
.entries
.map((entry) => entry.value)
.toList();
return await calendarService.getCalendar();
} catch (e) {
rethrow;
}

View File

@@ -9,5 +9,5 @@ abstract class CalendarService {
factory CalendarService(Dio dio, {String baseUrl}) = _CalendarService;
@GET('/api/calendar/index')
Future<Map<String, CalendarModel>> getCalendar();
Future<List<CalendarModel>> getCalendar();
}

View File

@@ -19,13 +19,13 @@ class _CalendarService implements CalendarService {
String? baseUrl;
@override
Future<Map<String, CalendarModel>> getCalendar() async {
Future<List<CalendarModel>> getCalendar() async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null;
final _result = await _dio.fetch<Map<String, dynamic>>(
_setStreamType<Map<String, CalendarModel>>(Options(
final _result = await _dio
.fetch<List<dynamic>>(_setStreamType<List<CalendarModel>>(Options(
method: 'GET',
headers: _headers,
extra: _extra,
@@ -41,8 +41,9 @@ class _CalendarService implements CalendarService {
_dio.options.baseUrl,
baseUrl,
))));
var _value = _result.data!.map((k, dynamic v) =>
MapEntry(k, CalendarModel.fromJson(v as Map<String, dynamic>)));
var _value = _result.data!
.map((dynamic i) => CalendarModel.fromJson(i as Map<String, dynamic>))
.toList();
return _value;
}

View File

@@ -9,8 +9,6 @@ import 'package:flutter/material.dart';
import '/core/app_export.dart';
import 'package:image_picker/image_picker.dart';
import 'package:eatvio_app/features/diary/presentation/bloc/diary_state.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
part 'diary_event.dart';
@@ -18,8 +16,7 @@ part 'diary_event.dart';
class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
final DiaryRepository diaryRepository;
DiaryBloc({required this.diaryRepository})
: super(const DiaryState.loading()) {
DiaryBloc({required this.diaryRepository}) : super(const DiaryState.loading()) {
on<LoadDiary>(loadDiary);
on<ChangeSatiety>(_changeSatiety); // пользователь нажимает на шкалу сытости
on<ChangeMood>(_changeMood); // пользователь нажимает на шкалу настроения
@@ -56,29 +53,15 @@ class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
final DiaryModel diary = await diaryRepository.getDiary(diaryID ?? 45);
final Meal currentMeal = diary.meals[0];
List<SelectionPopupModel> portionList = [
SelectionPopupModel(title: "gr"),
SelectionPopupModel(title: "pcs")
];
List<SelectionPopupModel> portionList = [SelectionPopupModel(title: "gr"), SelectionPopupModel(title: "pcs")];
final Map<String, dynamic> chartData =
await diaryRepository.getChartData(diaryID ?? 45);
final Map<String, dynamic> dailyNutritionIntake =
chartData['dailyNutritionIntake']!;
final Map<String, dynamic> dailyNutritionRecommendations =
chartData['dailyNutritionRecommendation']!;
final double ccal = dailyNutritionIntake['energy']! /
dailyNutritionRecommendations['energy']! *
100;
final double proteins = dailyNutritionIntake['proteins']! /
dailyNutritionRecommendations['proteins']! *
100;
final double fats = dailyNutritionIntake['fats']! /
dailyNutritionRecommendations['fats']! *
100;
final double carbs = dailyNutritionIntake['carbohydrates']! /
dailyNutritionRecommendations['carbohydrates']! *
100;
final Map<String, dynamic> chartData = await diaryRepository.getChartData(diaryID ?? 45);
final Map<String, dynamic> dailyNutritionIntake = chartData['dailyNutritionIntake']!;
final Map<String, dynamic> dailyNutritionRecommendations = chartData['dailyNutritionRecommendation']!;
final double ccal = dailyNutritionIntake['energy']! / dailyNutritionRecommendations['energy']! * 50;
final double proteins = dailyNutritionIntake['proteins']! / dailyNutritionRecommendations['proteins']! * 50;
final double fats = dailyNutritionIntake['fats']! / dailyNutritionRecommendations['fats']! * 50;
final double carbs = dailyNutritionIntake['carbohydrates']! / dailyNutritionRecommendations['carbohydrates']! * 50;
Color getColor(double value) {
if (value >= 99.1) {
@@ -104,8 +87,6 @@ class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
SelectionPopupModel(title: "Прием пищи 6", id: 6),
];
print(dailyNutritionRecommendations);
print(dailyNutritionIntake);
emit(DiaryState.loaded(
diary: diary,
currentMeal: currentMeal,
@@ -116,6 +97,8 @@ class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
chartData: chartDataCounted,
selectedMood: currentMeal.mood,
selectedSatiety: currentMeal.satiety,
wakeupController: TimeOfDay.now(),
retireController: TimeOfDay.now(),
commentController: TextEditingController(),
product_nameController: TextEditingController(),
productQuantityController: TextEditingController(),
@@ -136,54 +119,6 @@ class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
}
}
fetchChartValues(
String token,
int diaryID,
Emitter<DiaryState> emit,
) async {
final responseChart = await http.get(
Uri.parse(
baseUrl + '/api/' + '/diary/$diaryID/dailyNutritionData/',
),
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
);
if (responseChart.statusCode == 200) {
final responseBody = jsonDecode(responseChart.body);
print(responseBody);
final recommendedChartValues =
responseBody['dailyNutritionRecommendation']
.values
.map<int>((value) => convertToInt(value))
.toList();
final consumedChartValues = responseBody['dailyNutritionIntake']
.values
.map<int>((value) => convertToInt(value))
.toList();
print([
recommendedChartValues,
consumedChartValues,
]);
return [
recommendedChartValues,
consumedChartValues,
];
} else {
emit(DiaryStateError(
errorMessage: 'Ошибка при декодировании данных КБЖУ'));
print('fail');
return [
[],
[],
];
}
}
Future<void> _changeSatiety(
ChangeSatiety event,
Emitter<DiaryState> emit,
@@ -228,11 +163,9 @@ class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
) async {
if (state is DiaryStateLoaded) {
var currentState = state as DiaryStateLoaded;
var updatedState =
currentState.copyWith(wakeupController: event.selectedTime);
var updatedState = currentState.copyWith(wakeupController: event.selectedTime);
final DateFormat formatter = DateFormat('HH:mm');
final String wakeupString = formatter.format(DateTime(
2022, 1, 1, event.selectedTime.hour, event.selectedTime.minute));
final String wakeupString = formatter.format(DateTime(2022, 1, 1, event.selectedTime.hour, event.selectedTime.minute));
await diaryRepository.changeWakeup(
currentState.diary.id,
wakeupString,
@@ -247,11 +180,9 @@ class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
) async {
if (state is DiaryStateLoaded) {
var currentState = state as DiaryStateLoaded;
var updatedState =
currentState.copyWith(retireController: event.selectedTime);
var updatedState = currentState.copyWith(retireController: event.selectedTime);
final DateFormat formatter = DateFormat('HH:mm');
final String retireString = formatter.format(DateTime(
2022, 1, 1, event.selectedTime.hour, event.selectedTime.minute));
final String retireString = formatter.format(DateTime(2022, 1, 1, event.selectedTime.hour, event.selectedTime.minute));
await diaryRepository.changeRetire(
currentState.diary.id,
retireString,
@@ -277,8 +208,7 @@ class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
) async {
if (state is DiaryStateLoaded) {
final currentState = state as DiaryStateLoaded;
final Meal meal = currentState.diary.meals
.firstWhere((meal) => meal.type == event.value.id);
final Meal meal = currentState.diary.meals.firstWhere((meal) => meal.type == event.value.id);
DiaryStateLoaded updatedState = currentState.copyWith(
currentMeal: meal,
portions: meal.portions,
@@ -297,12 +227,10 @@ class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
if (state is DiaryStateLoaded) {
var currentState = state as DiaryStateLoaded;
final Map<String, List<Product>> productNutritionalValues =
await diaryRepository.inputProduct(event.input);
final Map<String, List<Product>> productNutritionalValues = await diaryRepository.inputProduct(event.input);
var updatedState = currentState.copyWith(
product_nameController: TextEditingController(text: event.input),
autocompleteList:
productNutritionalValues['product_nutritional_value'] ?? [],
autocompleteList: productNutritionalValues['product_nutritional_value'] ?? [],
);
if (event.input.length > 3) {
updatedState = updatedState.copyWith(moderationExpanded: true);
@@ -448,9 +376,9 @@ class DiaryBloc extends Bloc<DiaryEvent, DiaryState> {
await diaryRepository.finishDay(
currentState.diary.id,
currentState.wakeupController,
currentState.retireController,
currentState.commentController.text,
// currentState.wakeupController,
// currentState.retireController,
// currentState.commentController.text,
);
add(LoadDiary());
}

View File

@@ -26,8 +26,8 @@ abstract class DiaryState with _$DiaryState {
required List<Product> autocompleteList,
required Meal currentMeal,
required SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
required TimeOfDay wakeupController,
required TimeOfDay retireController,
TimeOfDay? mealTimeController,
required TextEditingController commentController,
required TextEditingController product_nameController,

View File

@@ -31,8 +31,8 @@ mixin _$DiaryState {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -68,8 +68,8 @@ mixin _$DiaryState {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -105,8 +105,8 @@ mixin _$DiaryState {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -224,8 +224,8 @@ class _$DiaryStateImpl implements _DiaryState {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -264,8 +264,8 @@ class _$DiaryStateImpl implements _DiaryState {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -304,8 +304,8 @@ class _$DiaryStateImpl implements _DiaryState {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -425,8 +425,8 @@ class _$DiaryStateLoadingImpl implements DiaryStateLoading {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -465,8 +465,8 @@ class _$DiaryStateLoadingImpl implements DiaryStateLoading {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -505,8 +505,8 @@ class _$DiaryStateLoadingImpl implements DiaryStateLoading {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -592,8 +592,8 @@ abstract class _$$DiaryStateLoadedImplCopyWith<$Res> {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -637,8 +637,8 @@ class __$$DiaryStateLoadedImplCopyWithImpl<$Res>
Object? autocompleteList = null,
Object? currentMeal = null,
Object? portionController = null,
Object? wakeupController = freezed,
Object? retireController = freezed,
Object? wakeupController = null,
Object? retireController = null,
Object? mealTimeController = freezed,
Object? commentController = null,
Object? product_nameController = null,
@@ -697,14 +697,14 @@ class __$$DiaryStateLoadedImplCopyWithImpl<$Res>
? _value.portionController
: portionController // ignore: cast_nullable_to_non_nullable
as SelectionPopupModel,
wakeupController: freezed == wakeupController
wakeupController: null == wakeupController
? _value.wakeupController
: wakeupController // ignore: cast_nullable_to_non_nullable
as TimeOfDay?,
retireController: freezed == retireController
as TimeOfDay,
retireController: null == retireController
? _value.retireController
: retireController // ignore: cast_nullable_to_non_nullable
as TimeOfDay?,
as TimeOfDay,
mealTimeController: freezed == mealTimeController
? _value.mealTimeController
: mealTimeController // ignore: cast_nullable_to_non_nullable
@@ -812,8 +812,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded {
required final List<Product> autocompleteList,
required this.currentMeal,
required this.portionController,
this.wakeupController,
this.retireController,
required this.wakeupController,
required this.retireController,
this.mealTimeController,
required this.commentController,
required this.product_nameController,
@@ -898,9 +898,9 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded {
@override
final SelectionPopupModel portionController;
@override
final TimeOfDay? wakeupController;
final TimeOfDay wakeupController;
@override
final TimeOfDay? retireController;
final TimeOfDay retireController;
@override
final TimeOfDay? mealTimeController;
@override
@@ -1062,8 +1062,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -1130,8 +1130,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -1198,8 +1198,8 @@ class _$DiaryStateLoadedImpl implements DiaryStateLoaded {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -1304,8 +1304,8 @@ abstract class DiaryStateLoaded implements DiaryState {
required final List<Product> autocompleteList,
required final Meal currentMeal,
required final SelectionPopupModel portionController,
final TimeOfDay? wakeupController,
final TimeOfDay? retireController,
required final TimeOfDay wakeupController,
required final TimeOfDay retireController,
final TimeOfDay? mealTimeController,
required final TextEditingController commentController,
required final TextEditingController product_nameController,
@@ -1333,8 +1333,8 @@ abstract class DiaryStateLoaded implements DiaryState {
List<Product> get autocompleteList;
Meal get currentMeal;
SelectionPopupModel get portionController;
TimeOfDay? get wakeupController;
TimeOfDay? get retireController;
TimeOfDay get wakeupController;
TimeOfDay get retireController;
TimeOfDay? get mealTimeController;
TextEditingController get commentController;
TextEditingController get product_nameController;
@@ -1435,8 +1435,8 @@ class _$DiaryStateErrorImpl implements DiaryStateError {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -1475,8 +1475,8 @@ class _$DiaryStateErrorImpl implements DiaryStateError {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,
@@ -1515,8 +1515,8 @@ class _$DiaryStateErrorImpl implements DiaryStateError {
List<Product> autocompleteList,
Meal currentMeal,
SelectionPopupModel portionController,
TimeOfDay? wakeupController,
TimeOfDay? retireController,
TimeOfDay wakeupController,
TimeOfDay retireController,
TimeOfDay? mealTimeController,
TextEditingController commentController,
TextEditingController product_nameController,

View File

@@ -842,228 +842,6 @@ class DiaryScreen extends StatelessWidget {
};
}
/*_buildNutritionChart(BuildContext context, DiaryStateLoaded state) {
final List<int> recommendedValues = state
.recommendedChartValues; // Рекомендуемые значения: калории, жиры, белки, углеводы
final List<int> consumedValues = state.consumedChartValues; //
return Container(
margin: EdgeInsets.symmetric(horizontal: 16.h),
padding: EdgeInsets.symmetric(
horizontal: 10.h,
vertical: 16.v,
),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: const BorderRadius.all(Radius.circular(12)),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.5),
spreadRadius: 2,
blurRadius: 5,
offset: Offset(0, 3),
),
],
),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(height: 3.v),
Text(
"Ваш КБЖУ",
style: theme.textTheme.titleMedium,
),
SizedBox(height: 8.v),
Text(
"От дневной суточной нормы",
style: CustomTextStyles.bodyMediumBluegray800,
),
SizedBox(height: 19.v),
Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(
left: 30.h,
right: 12.h,
),
child: AspectRatio(
aspectRatio: 1.5,
child: BarChart(
BarChartData(
alignment: BarChartAlignment.spaceAround,
barTouchData: BarTouchData(enabled: false),
titlesData: FlTitlesData(
show: true,
bottomTitles: AxisTitles(
sideTitles: SideTitles(
showTitles: true,
//getTitlesWidget: (value, meta) => newMethod(value),
),
),
),
borderData: FlBorderData(show: false),
barGroups: [
BarChartGroupData(
x: 0,
barRods: [
BarChartRodData(
toY: consumedValues[0] / recommendedValues[0] * 100,
color: checkConsumedValues(
[recommendedValues[0]], [consumedValues[1]])
? Colors.red
: Colors.blue,
),
],
),
BarChartGroupData(
x: 1,
barRods: [
BarChartRodData(
toY: consumedValues[1] / recommendedValues[1] * 100,
color: checkConsumedValues(
[recommendedValues[1]], [consumedValues[1]])
? Colors.red
: Colors.blue,
),
],
),
BarChartGroupData(
x: 2,
barRods: [
BarChartRodData(
toY: consumedValues[2] / recommendedValues[2] * 100,
color: checkConsumedValues(
[recommendedValues[2]], [consumedValues[2]])
? Colors.red
: Colors.blue,
),
],
),
BarChartGroupData(
x: 3,
barRods: [
BarChartRodData(
toY: consumedValues[3] / recommendedValues[3] * 100,
color: checkConsumedValues(
[recommendedValues[3]], [consumedValues[3]])
? Colors.red
: Colors.blue,
),
],
),
],
),
),
),
),
),
SizedBox(height: 8.v),
SizedBox(height: 2.v),
Padding(
padding: EdgeInsets.only(
left: 10.h,
right: 2.h,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Калорий",
style: theme.textTheme.bodySmall,
),
Padding(
padding: EdgeInsets.only(
left: 25.h,
bottom: 11.v,
),
child: Text(
"Белков",
style: theme.textTheme.bodySmall,
),
),
Padding(
padding: EdgeInsets.only(
left: 19.h,
bottom: 11.v,
),
child: Text(
"Жиров",
style: theme.textTheme.bodySmall,
),
),
Padding(
padding: EdgeInsets.only(
left: 14.h,
bottom: 11.v,
),
child: Text(
"Углеводов",
style: theme.textTheme.bodySmall,
),
),
],
),
),
SizedBox(height: 2.v),
Padding(
padding: EdgeInsets.only(
left: 10.h,
right: 2.h,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"${consumedValues[0].toInt()} из ${recommendedValues[0].toInt()}",
style: theme.textTheme.bodySmall,
),
Padding(
padding: EdgeInsets.only(
left: 25.h,
bottom: 11.v,
),
child: Text(
"${consumedValues[1].toInt()} из ${recommendedValues[1].toInt()}",
style: theme.textTheme.bodySmall,
),
),
Padding(
padding: EdgeInsets.only(
left: 19.h,
bottom: 11.v,
),
child: Text(
"${consumedValues[2].toInt()} из ${recommendedValues[2].toInt()}",
style: theme.textTheme.bodySmall,
),
),
Padding(
padding: EdgeInsets.only(
left: 14.h,
bottom: 11.v,
),
child: Text(
"${consumedValues[3].toInt()} из ${recommendedValues[3].toInt()}",
style: theme.textTheme.bodySmall,
),
),
],
),
),
SizedBox(height: 19.v),
if (checkConsumedValues(recommendedValues, consumedValues))
Text(
"*Превышенная суточная норма",
style: theme.textTheme.labelLarge,
),
],
),
);
}*/
/// Section Widget
_buildComment(BuildContext context, DiaryStateLoaded state) {
return Container(
margin: EdgeInsets.symmetric(horizontal: 16.h),
@@ -1155,7 +933,7 @@ class DiaryScreen extends StatelessWidget {
child: AbsorbPointer(
child: CustomTextFormField(
hintText:
state.wakeupController?.format(context).toString(),
state.wakeupController.format(context).toString(),
prefix: Icon(Icons.sunny),
autofocus: false,
),
@@ -1167,7 +945,7 @@ class DiaryScreen extends StatelessWidget {
child: AbsorbPointer(
child: CustomTextFormField(
hintText:
state.retireController?.format(context).toString(),
state.retireController.format(context).toString(),
prefix: Icon(Icons.bed),
autofocus: false,
),
@@ -1324,7 +1102,7 @@ class DiaryScreen extends StatelessWidget {
BuildContext context, DiaryStateLoaded state) async {
final TimeOfDay? pickedTime = await showTimePicker(
context: context,
initialTime: state.wakeupController ?? TimeOfDay.now(),
initialTime: state.wakeupController,
);
if (pickedTime != null && pickedTime != state.wakeupController) {
context.read<DiaryBloc>().add(WakeupEvent(pickedTime));
@@ -1335,7 +1113,7 @@ class DiaryScreen extends StatelessWidget {
BuildContext context, DiaryStateLoaded state) async {
final TimeOfDay? pickedTime = await showTimePicker(
context: context,
initialTime: state.retireController ?? TimeOfDay.now(),
initialTime: state.retireController,
);
if (pickedTime != null && pickedTime != state.retireController) {
context.read<DiaryBloc>().add(RetireEvent(pickedTime));

View File

@@ -1,6 +1,4 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:eatvio_app/features/diary/models/diary_model.dart';
import 'package:eatvio_app/features/diary/models/portion.dart';
@@ -189,22 +187,12 @@ class DiaryRepository {
Future<void> finishDay(
int diaryID,
TimeOfDay? wakeup,
TimeOfDay? retire,
String? comment,
) async {
try {
final formatter = DateFormat('HH:mm');
final wakeupString =
formatter.format(DateTime(2022, 1, 1, wakeup!.hour, wakeup.minute));
final retireString =
formatter.format(DateTime(2022, 1, 1, retire!.hour, retire.minute));
await diaryService.sendFinishDay(
diaryID,
wakeupString,
retireString,
comment ?? " ",
);
/*final formatter = DateFormat('HH:mm');
final wakeupString = formatter.format(DateTime(2022, 1, 1, wakeup.hour, wakeup.minute));
final retireString = formatter.format(DateTime(2022, 1, 1, retire.hour, retire.minute));*/
await diaryService.sendFinishDay(diaryID);
} catch (e) {
rethrow;
}

View File

@@ -22,8 +22,7 @@ abstract class DiaryService {
Future<dynamic> getChart(@Path() int id);
@GET('/api/diary/product_nutritional_values/filter')
Future<Map<String, List<Product>>> getInputProduct(
@Query('name') String name);
Future<Map<String, List<Product>>> getInputProduct(@Query('name') String name);
@POST('/api/diary/{diary_id}/meal/{meal_id}/satiety/fill')
Future<Map<String, int>> sendSatietyData(
@@ -79,9 +78,9 @@ abstract class DiaryService {
@POST('/api/diary/{diary_id}/finishDay')
Future<void> sendFinishDay(
@Path() int diary_id,
@Query('wakeUp') String wakeup,
@Query('retire') String retire,
@Query('comment') String comment,
//@Query('wakeUp') String wakeup,
//@Query('retire') String retire,
//@Query('comment') String comment,
);
@DELETE('/api/diary/{diary_id}/meal/{meal_id}/portions/{portion_id}/delete')

View File

@@ -365,18 +365,9 @@ class _DiaryService implements DiaryService {
}
@override
Future<void> sendFinishDay(
int diary_id,
String wakeup,
String retire,
String comment,
) async {
Future<void> sendFinishDay(int diary_id) async {
final _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{
r'wakeUp': wakeup,
r'retire': retire,
r'comment': comment,
};
final queryParameters = <String, dynamic>{};
final _headers = <String, dynamic>{};
const Map<String, dynamic>? _data = null;
await _dio.fetch<void>(_setStreamType<void>(Options(

View File

@@ -6,15 +6,18 @@ import 'package:eatvio_app/features/blog_post/repositories/blog_post_repository.
import 'package:eatvio_app/features/blog_post/services/blog_post_service.dart';
import 'package:eatvio_app/features/bottom_navigation_bar/presentation/bloc/new_messages_cubit/new_messages_cubit.dart';
import 'package:eatvio_app/features/bottom_navigation_bar/presentation/bloc/notifications_cubit/notifications_cubit.dart';
import 'package:eatvio_app/features/calendar/presentation/bloc/calendar_cubit.dart';
import 'package:eatvio_app/features/calendar/repositories/calendar_repository.dart';
import 'package:eatvio_app/features/calendar/services/calendar_service.dart';
import 'package:eatvio_app/features/chat/presentation/bloc/chat_room_cubit/chat_room_cubit.dart';
import 'package:eatvio_app/features/chat/repositories/chat_repository.dart';
import 'package:eatvio_app/features/chat/services/chat_service.dart';
import 'package:eatvio_app/features/diary/presentation/bloc/diary_bloc.dart';
import 'package:eatvio_app/features/diary/repositories/diary_repository.dart';
import 'package:eatvio_app/features/diary/services/diary_service.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/feed_cubit/feed_cubit.dart';
import 'package:eatvio_app/features/feed/repositories/feed_repository.dart';
import 'package:eatvio_app/features/feed/services/feed_service.dart';
import 'package:eatvio_app/features/diary/presentation/bloc/diary_bloc.dart';
import 'package:eatvio_app/features/diary/repositories/diary_repository.dart';
import 'package:eatvio_app/features/diary/services/diary_service.dart';
import 'package:eatvio_app/features/registration/presentation/bloc/registration_cubit/registration_cubit.dart';
import 'package:eatvio_app/features/registration/repositories/registration_repository.dart';
import 'package:eatvio_app/features/registration/services/registration_service.dart';
@@ -33,6 +36,7 @@ Future<void> init() async {
sl.registerFactory<FeedCubit>(() => FeedCubit(feedRepository: sl()));
sl.registerFactory<BlogPostCubit>(() => BlogPostCubit(blogPostRepository: sl()));
sl.registerFactory<DiaryBloc>(() => DiaryBloc(diaryRepository: sl()));
sl.registerFactory<CalendarCubit>(() => CalendarCubit(calendarRepository: sl()));
// Repository
sl.registerLazySingleton<ChatRepository>(() => ChatRepository(chatService: sl()));
@@ -40,6 +44,7 @@ Future<void> init() async {
sl.registerLazySingleton<BlogPostRepository>(() => BlogPostRepository(blogPostService: sl()));
sl.registerLazySingleton<RegistrationRepository>(() => RegistrationRepository(registrationService: sl()));
sl.registerLazySingleton<DiaryRepository>(() => DiaryRepository(diaryService: sl()));
sl.registerLazySingleton<CalendarRepository>(() => CalendarRepository(calendarService: sl()));
// Services
sl.registerLazySingleton<ChatService>(() => ChatService(sl()));
@@ -47,6 +52,7 @@ Future<void> init() async {
sl.registerLazySingleton<BlogPostService>(() => BlogPostService(sl()));
sl.registerLazySingleton<RegistrationService>(() => RegistrationService(sl()));
sl.registerLazySingleton<DiaryService>(() => DiaryService(sl()));
sl.registerLazySingleton<CalendarService>(() => CalendarService(sl()));
// External
sl.registerLazySingleton(

View File

@@ -1,12 +1,9 @@
import 'package:eatvio_app/app_router.dart';
import 'package:eatvio_app/core/initialization_cubit/initialization_cubit.dart';
import 'package:eatvio_app/core/initialization_cubit/initialization_state.dart';
import 'package:eatvio_app/features/bottom_navigation_bar/presentation/bloc/new_messages_cubit/new_messages_cubit.dart';
import 'package:eatvio_app/features/bottom_navigation_bar/presentation/bloc/notifications_cubit/notifications_cubit.dart';
import 'package:eatvio_app/features/chat/presentation/pages/chat_select_screen/bloc/chat_select_bloc.dart';
import 'package:eatvio_app/features/chat/presentation/pages/chat_select_screen/models/chat_select_model.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/feed_cubit/feed_cubit.dart';
import 'package:eatvio_app/locator_service.dart' as di;
import 'package:eatvio_app/locator_service.dart';
import 'package:eatvio_app/features/diary/presentation/bloc/diary_bloc.dart';
import 'package:eatvio_app/presentation/profile/my_profile_screen/bloc/my_profile_bloc.dart';
@@ -14,11 +11,12 @@ import 'package:eatvio_app/presentation/profile/my_profile_screen/models/my_prof
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:keyboard_dismisser/keyboard_dismisser.dart';
import 'package:path_provider/path_provider.dart';
import 'core/app_export.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:path_provider/path_provider.dart';
import 'package:keyboard_dismisser/keyboard_dismisser.dart';
import 'package:eatvio_app/locator_service.dart' as di;
import 'package:intl/date_symbol_data_local.dart';
var globalMessengerKey = GlobalKey<ScaffoldMessengerState>();
@@ -34,7 +32,7 @@ void main() async {
DeviceOrientation.portraitUp,
]);
await PrefUtils().init();
runApp(MyApp());
initializeDateFormatting().then((_) => runApp(MyApp()));
}
class MyApp extends StatelessWidget {
@@ -42,9 +40,7 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<InitializationCubit>(create: (context) => sl<InitializationCubit>()),
BlocProvider<NewMessagesCubit>(create: (context) => sl<NewMessagesCubit>()),
BlocProvider<NotificationsCubit>(create: (context) => sl<NotificationsCubit>()),
BlocProvider<InitializationCubit>(create: (context) => InitializationCubit(chatRepository: sl())),
BlocProvider<ThemeBloc>(create: (context) => ThemeBloc(ThemeState(themeType: PrefUtils().getThemeData()))),
BlocProvider<FeedCubit>(create: (context) => sl<FeedCubit>()..loadFeedBlogPostList()),
BlocProvider<MyProfileBloc>(create: (context) => MyProfileBloc(MyProfileState(myProfileModelObj: MyProfileModel()))..add(MyProfileInitialEvent())),
@@ -52,6 +48,7 @@ class MyApp extends StatelessWidget {
BlocProvider<ChatSelectBloc>(
create: (context) => ChatSelectBloc(ChatSelectState(chatSelectModelObj: ChatSelectModel()))..add(ChatSelectInitialEvent()),
),
BlocProvider<CalendarCubit>(create: (context) => sl<CalendarCubit>()..loadCalendarList()),
],
child: BlocListener<InitializationCubit, InitializationState>(
listener: (BuildContext context, InitializationState state) {},

View File

@@ -22,19 +22,21 @@ class CustomNavigationMenu extends StatelessWidget {
icon: ImageConstant.imgRecipes,
text: 'Мои рецепты',
onTap: () => GoRouter.of(context).push('/recipe-select-screen'),
// Действие при нажатии на "Мои рецепты"
),
MenuItem(
icon: ImageConstant.imgDiets,
text: 'Мои диеты',
onTap: () => GoRouter.of(context).push('/diet-select-screen'),
// Действие при нажатии на "Мои рецепты"
),
MenuItem(
icon: ImageConstant.imgPlans,
text: 'Мои планы',
onTap: () => GoRouter.of(context).push('/plan-select-screen'),
// Действие при нажатии на "Мои рецепты"
),
MenuItem(
icon: ImageConstant.imgRecipes,
text: 'Календарь',
onTap: () => GoRouter.of(context).push('/calendar-screen'),
),
MenuItem(
icon: ImageConstant.imgFinance,
@@ -44,15 +46,12 @@ class CustomNavigationMenu extends StatelessWidget {
MenuItem(
icon: ImageConstant.imgSupport,
text: 'Поддержка',
onTap: () {
// Действие при нажатии на "Поддержка"
},
onTap: () {},
),
MenuItem(
icon: ImageConstant.imgExit,
text: 'Выход',
onTap: _onTapLogout(context),
// Действие при нажатии на "Выход"
),
],
),

View File

@@ -46,6 +46,7 @@ dependencies:
google_fonts: ^6.2.1
location: ^7.0.0
syncfusion_flutter_charts: ^26.1.42
table_calendar: ^3.1.2
dev_dependencies:
build_runner: ^2.4.11