feature(collections): Заготовка под апи. Переключалка коллекций
This commit is contained in:
@@ -12,6 +12,8 @@ import 'package:remever/screens/collections/widgets/collection_card.dart';
|
||||
import 'package:remever/screens/collections/widgets/collections_app_bar.dart';
|
||||
import 'package:remever/screens/collections/widgets/collections_filters.dart';
|
||||
import 'package:remever/services/collection/collections_interface.dart';
|
||||
import 'package:remever/services/collection/collections_service.dart';
|
||||
import 'package:remever/services/tickets/tickets_interface.dart';
|
||||
|
||||
@RoutePage()
|
||||
class CollectionScreen extends StatefulWidget {
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:remever/common/resources.dart';
|
||||
import 'package:remever/common/widgets/typography.dart';
|
||||
import 'package:remever/common/widgets/wspace.dart';
|
||||
import 'package:remever/components/extensions/context.dart';
|
||||
import 'package:remever/components/extensions/state.dart';
|
||||
import 'package:remever/widgets/debug/app_debug.dart';
|
||||
|
||||
class CollectionsFilters extends StatefulWidget {
|
||||
const CollectionsFilters({super.key});
|
||||
@@ -16,37 +12,52 @@ class CollectionsFilters extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _CollectionsFiltersState extends State<CollectionsFilters> {
|
||||
static const List<String> _filterOptions = ['Все', 'Публичные', 'Подписки'];
|
||||
String _selected = 'Все';
|
||||
|
||||
void _onFilterSelected(String title) {
|
||||
safeSetState(() {
|
||||
_selected = title;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AppDebug(
|
||||
builder: (context, isDebug) {
|
||||
if (!isDebug) return HSpace(20);
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 28).r,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: <Widget>[
|
||||
_buildFilterButton(AppColors.white, 'Все', () {
|
||||
safeSetState(() {});
|
||||
}),
|
||||
_buildFilterButton(AppColors.gray_bg, 'Публичные', () {
|
||||
safeSetState(() {});
|
||||
}),
|
||||
_buildFilterButton(AppColors.gray_bg, 'Подписки', () {
|
||||
safeSetState(() {});
|
||||
}),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
return Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 16, horizontal: 28).r,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: _buildFilterButtons(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
///
|
||||
/// Построение кнопки фильтра
|
||||
///
|
||||
Widget _buildFilterButton(Color color, String title, void Function()? onTap) {
|
||||
List<Widget> _buildFilterButtons() {
|
||||
return _filterOptions
|
||||
.map(
|
||||
(title) => _FilterButton(
|
||||
title: title,
|
||||
isSelected: _selected == title,
|
||||
onTap: () => _onFilterSelected(title),
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
|
||||
class _FilterButton extends StatelessWidget {
|
||||
final String title;
|
||||
final bool isSelected;
|
||||
final VoidCallback onTap;
|
||||
|
||||
const _FilterButton({
|
||||
required this.title,
|
||||
required this.isSelected,
|
||||
required this.onTap,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return GestureDetector(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
@@ -54,7 +65,7 @@ class _CollectionsFiltersState extends State<CollectionsFilters> {
|
||||
height: 36.h,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(16)).r,
|
||||
color: color,
|
||||
color: isSelected ? AppColors.white : AppColors.bg,
|
||||
),
|
||||
child: Center(child: AppTypography(title, type: SemiBold14px())),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user