Merge pull request 'new test cases' (#218) from misha/eatvio_app:main into main

Reviewed-on: eatvio/eatvio_app#218
This commit is contained in:
BLoC
2025-01-29 11:35:18 +00:00
38 changed files with 897 additions and 460 deletions

View File

@@ -267,7 +267,7 @@ class PlansCubit extends Cubit<PlansState> {
Duration(milliseconds: 200),
() async {
try {
await planRepository.addToFavorite(slug);
await planRepository.removeFromFavorite(slug);
} catch (e) {
log(e.toString());
showErrorToast('Произошла ошибка. Попробуйте ещё раз через некоторое время');

View File

@@ -10,7 +10,7 @@ import 'package:eatvio_app/features/feed/presentation/bloc/profile_cubit/profile
import 'package:eatvio_app/features/feed/presentation/bloc/profile_cubit/profile_state.dart';
import 'package:eatvio_app/features/feed/presentation/bloc/recipes_cubit/recipes_cubit.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/blog_posts.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/choice_chip_widget.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/chip_group.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/consultants.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/diets.dart';
import 'package:eatvio_app/features/feed/presentation/widgets/plans.dart';
@@ -18,13 +18,13 @@ import 'package:eatvio_app/features/feed/presentation/widgets/tags_modal_widget.
import 'package:eatvio_app/features/feed/presentation/bloc/plans_cubit/plans_cubit.dart';
import 'package:eatvio_app/core/locator_service.dart';
import 'package:eatvio_app/core/theme/theme_helper.dart';
import 'package:eatvio_app/features/recipes/presentation/pages/recipe_create_screen.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import '../widgets/recipes.dart';
final bucket = PageStorageBucket();
class FeedScreen extends StatelessWidget {
const FeedScreen({super.key});
@@ -122,6 +122,7 @@ class _FeedScreenContentState extends State<FeedScreenContent> {
recipesScrollController.dispose();
dietsScrollController.dispose();
plansScrollController.dispose();
consultantsScrollController.dispose();
super.dispose();
}
@@ -179,7 +180,18 @@ class _FeedScreenContentState extends State<FeedScreenContent> {
floating: true,
snap: true,
scrolledUnderElevation: 0,
bottom: _chipGroup(),
bottom: PreferredSize(
preferredSize: Size(MediaQuery.of(context).size.width, 32),
child: ChipGroup(
selectedChipIndex: _selectedChipIndex,
chipsLabelList: chipsLabelList,
setSelectedChipIndex: (index) {
setState(() {
_selectedChipIndex = index;
});
},
),
),
title: Row(
children: [
CustomSearchBar(
@@ -245,7 +257,7 @@ class _FeedScreenContentState extends State<FeedScreenContent> {
SizedBox(width: 12),
switch (_selectedChipIndex) {
1 => AddItemButton(
onTap: () => GoRouter.of(context).pushNamed('recipeCreateScreen'),
onTap: () => GoRouter.of(context).pushNamed(RecipeCreateScreen.name),
),
2 => AddItemButton(
onTap: state.profile?.role == 'consultant' ? () => GoRouter.of(context).pushNamed(CreateDietScreen.name) : null,
@@ -273,80 +285,4 @@ class _FeedScreenContentState extends State<FeedScreenContent> {
),
);
}
_chipGroup() {
return PreferredSize(
preferredSize: Size(MediaQuery.of(context).size.width, 32),
child: Align(
alignment: Alignment.centerLeft,
child: SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 16),
scrollDirection: Axis.horizontal,
child: Row(
children: [
ChoiceChipWidget(
index: 0,
selectedChipIndex: _selectedChipIndex,
chipsLabelList: chipsLabelList,
onSelected: (bool selected) {
setState(() {
_selectedChipIndex = 0;
FocusScope.of(context).requestFocus(new FocusNode());
});
},
),
SizedBox(width: 8),
ChoiceChipWidget(
index: 1,
selectedChipIndex: _selectedChipIndex,
chipsLabelList: chipsLabelList,
onSelected: (bool selected) {
setState(() {
_selectedChipIndex = 1;
FocusScope.of(context).requestFocus(new FocusNode());
});
},
),
SizedBox(width: 8),
ChoiceChipWidget(
index: 2,
selectedChipIndex: _selectedChipIndex,
chipsLabelList: chipsLabelList,
onSelected: (bool selected) {
setState(() {
_selectedChipIndex = 2;
FocusScope.of(context).requestFocus(new FocusNode());
});
},
),
SizedBox(width: 8),
ChoiceChipWidget(
index: 3,
selectedChipIndex: _selectedChipIndex,
chipsLabelList: chipsLabelList,
onSelected: (bool selected) {
setState(() {
_selectedChipIndex = 3;
FocusScope.of(context).requestFocus(new FocusNode());
});
},
),
SizedBox(width: 8),
ChoiceChipWidget(
index: 4,
selectedChipIndex: _selectedChipIndex,
chipsLabelList: chipsLabelList,
onSelected: (bool selected) {
setState(() {
_selectedChipIndex = 4;
FocusScope.of(context).requestFocus(new FocusNode());
});
},
),
],
),
),
),
);
}
}

View File

@@ -0,0 +1,44 @@
import 'package:eatvio_app/features/feed/presentation/widgets/choice_chip_widget.dart';
import 'package:flutter/widgets.dart';
class ChipGroup extends StatelessWidget {
const ChipGroup({
super.key,
required this.selectedChipIndex,
required this.chipsLabelList,
required this.setSelectedChipIndex,
});
final int selectedChipIndex;
final List<String> chipsLabelList;
final void Function(int) setSelectedChipIndex;
@override
Widget build(BuildContext context) {
return Align(
alignment: Alignment.centerLeft,
child: SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 16),
scrollDirection: Axis.horizontal,
child: Row(
children: [
...List.generate(
5,
(index) => Padding(
padding: EdgeInsets.only(right: 8.0),
child: ChoiceChipWidget(
index: index,
selectedChipIndex: selectedChipIndex,
chipsLabelList: chipsLabelList,
onSelected: (bool selected) {
setSelectedChipIndex(index);
FocusScope.of(context).requestFocus(new FocusNode());
},
),
),
),
],
),
),
);
}
}