bug fixes

This commit is contained in:
MohammadTaha Basiri 2022-04-02 17:06:54 +04:30
parent 56a885a6ee
commit b343541200
10 changed files with 59 additions and 13 deletions

View File

@ -142,7 +142,8 @@ class RouteGenerator {
return _createRoute( return _createRoute(
ChangeNotifierProvider<HashtagState>( ChangeNotifierProvider<HashtagState>(
create: (context) => HashtagState(), create: (context) => HashtagState(),
child: Hashtag(tag: settings.arguments as Tag), child:
Hashtag(pageData: settings.arguments as Map<String, dynamic>),
), ),
); );
case Routes.filteredBookmarks: case Routes.filteredBookmarks:

View File

@ -13,18 +13,20 @@ import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class Hashtag extends StatefulWidget { class Hashtag extends StatefulWidget {
final Tag tag; final Map<String, dynamic> pageData;
const Hashtag({Key? key, required this.tag}) : super(key: key); const Hashtag({Key? key, required this.pageData}) : super(key: key);
@override @override
_HashtagState createState() => _HashtagState(); _HashtagState createState() => _HashtagState();
} }
class _HashtagState extends State<Hashtag> { class _HashtagState extends State<Hashtag> {
Tag get _tag => widget.pageData['tag'];
@override @override
void initState() { void initState() {
final state = context.read<HashtagState>(); final state = context.read<HashtagState>();
state.id = widget.tag.id; state.id = _tag.id;
Future.delayed(Duration.zero, () => state.getTagItems(page: 1)); Future.delayed(Duration.zero, () => state.getTagItems(page: 1));
super.initState(); super.initState();
} }
@ -32,7 +34,7 @@ class _HashtagState extends State<Hashtag> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return DidvanScaffold( return DidvanScaffold(
appBarData: AppBarData(title: '#' + widget.tag.label, hasBack: true), appBarData: AppBarData(title: '#' + _tag.label, hasBack: true),
slivers: [ slivers: [
Consumer<HashtagState>( Consumer<HashtagState>(
builder: (context, state, child) => SliverStateHandler<HashtagState>( builder: (context, state, child) => SliverStateHandler<HashtagState>(
@ -57,25 +59,29 @@ class _HashtagState extends State<Hashtag> {
case 'radar': case 'radar':
return RadarOverview( return RadarOverview(
radar: item, radar: item,
onMarkChanged: (_, value, __) =>
_changeMark(item.id, value, type),
onCommentsChanged: (_, count) => item.comments = count, onCommentsChanged: (_, count) => item.comments = count,
onMarkChanged: (_, value, __) => item.marked = value,
); );
case 'news': case 'news':
return NewsOverview( return NewsOverview(
news: item, news: item,
onMarkChanged: (_, value, __) => item.marked = value, onMarkChanged: (_, value, __) =>
_changeMark(item.id, value, type),
); );
case 'podcast': case 'podcast':
return PodcastOverview( return PodcastOverview(
podcast: item, podcast: item,
onMarkChanged: (_, value, __) => item.marked = value, onMarkChanged: (_, value, __) =>
_changeMark(item.id, value, type),
studioRequestArgs: studioRequestArgs:
const StudioRequestArgs(page: 0, type: 'podcast'), const StudioRequestArgs(page: 0, type: 'podcast'),
); );
case 'video': case 'video':
return VideoOverview( return VideoOverview(
video: item, video: item,
onMarkChanged: (_, value, __) => item.marked = value, onMarkChanged: (_, value, __) =>
_changeMark(item.id, value, type),
studioRequestArgs: studioRequestArgs:
const StudioRequestArgs(page: 0, type: 'video'), const StudioRequestArgs(page: 0, type: 'video'),
); );
@ -90,4 +96,15 @@ class _HashtagState extends State<Hashtag> {
], ],
); );
} }
void _changeMark(int id, bool value, String type) {
final state = context.read<HashtagState>();
state.items
.firstWhere((element) => element.id == id && element.type == type)
.marked = value;
state.update();
if (type == widget.pageData['type']) {
widget.pageData['onMarkChanged'](id, value);
}
}
} }

View File

@ -57,6 +57,8 @@ class _NewsDetailsState extends State<NewsDetails> {
scrollController: _scrollController, scrollController: _scrollController,
items: state.news, items: state.news,
currentIndex: state.currentIndex, currentIndex: state.currentIndex,
onMarkChanged: (id, value) =>
widget.pageData['onMarkChanged'](id, value),
), ),
), ),
Positioned( Positioned(

View File

@ -57,6 +57,8 @@ class _RadarDetailsState extends State<RadarDetails> {
scrollController: _scrollController, scrollController: _scrollController,
items: state.radars, items: state.radars,
currentIndex: state.currentIndex, currentIndex: state.currentIndex,
onMarkChanged: (id, value) =>
widget.pageData['onMarkChanged']?.call(id, value),
), ),
), ),
Positioned( Positioned(

View File

@ -219,6 +219,7 @@ class _StudioDetailsState extends State<StudioDetails> {
children: [ children: [
StudioDetailsWidget( StudioDetailsWidget(
scrollController: _scrollController, scrollController: _scrollController,
onMarkChanged: widget.pageData['onMarkChanged'],
), ),
], ],
), ),

View File

@ -150,6 +150,7 @@ class _StudioDetailsState extends State<StudioDetails> {
children: [ children: [
StudioDetailsWidget( StudioDetailsWidget(
scrollController: _scrollController, scrollController: _scrollController,
onMarkChanged: widget.pageData['onMarkChanged'],
), ),
], ],
), ),

View File

@ -21,8 +21,10 @@ import 'package:url_launcher/url_launcher.dart';
class StudioDetailsWidget extends StatelessWidget { class StudioDetailsWidget extends StatelessWidget {
final ScrollController? scrollController; final ScrollController? scrollController;
final VoidCallback? onCommentsTabSelected; final VoidCallback? onCommentsTabSelected;
final void Function(int id, bool value) onMarkChanged;
const StudioDetailsWidget({ const StudioDetailsWidget({
Key? key, Key? key,
required this.onMarkChanged,
this.onCommentsTabSelected, this.onCommentsTabSelected,
this.scrollController, this.scrollController,
}) : super(key: key); }) : super(key: key);
@ -87,7 +89,11 @@ class StudioDetailsWidget extends StatelessWidget {
for (var i = 0; for (var i = 0;
i < state.studio.tags.length; i < state.studio.tags.length;
i++) i++)
TagItem(tag: state.studio.tags[i]), TagItem(
tag: state.studio.tags[i],
onMarkChanged: onMarkChanged,
type: isVideo ? 'video' : 'podcast',
),
], ],
), ),
const SizedBox(height: 20), const SizedBox(height: 20),

View File

@ -9,18 +9,26 @@ import 'package:flutter/material.dart';
class TagItem extends StatelessWidget { class TagItem extends StatelessWidget {
final Tag tag; final Tag tag;
final void Function(int id, bool value) onMarkChanged;
final String type;
const TagItem({ const TagItem({
Key? key, Key? key,
required this.tag, required this.tag,
required this.onMarkChanged,
required this.type,
}) : super(key: key); }) : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return InkWrapper( return InkWrapper(
borderRadius: DesignConfig.lowBorderRadius, borderRadius: DesignConfig.lowBorderRadius,
onPressed: () => onPressed: () => Navigator.of(context).pushNamed(Routes.hashtag,
Navigator.of(context).pushNamed(Routes.hashtag, arguments: tag), arguments: {
'tag': tag,
'onMarkChanged': onMarkChanged,
'type': type
}),
child: Container( child: Container(
padding: const EdgeInsets.symmetric( padding: const EdgeInsets.symmetric(
vertical: 4, vertical: 4,

View File

@ -338,6 +338,8 @@ class _PlayerNavBar extends StatelessWidget {
sheetKey.currentState?.expand, sheetKey.currentState?.expand,
); );
}, },
onMarkChanged: (id, value) =>
context.read<StudioState>().changeMark(id, value, true),
), ),
), ),
), ),

View File

@ -21,6 +21,7 @@ class DidvanPageView extends StatefulWidget {
final int initialIndex; final int initialIndex;
final int currentIndex; final int currentIndex;
final bool isRadar; final bool isRadar;
final void Function(int id, bool value) onMarkChanged;
final ScrollController scrollController; final ScrollController scrollController;
final void Function(int index) onPageChanged; final void Function(int index) onPageChanged;
@ -32,6 +33,7 @@ class DidvanPageView extends StatefulWidget {
required this.onPageChanged, required this.onPageChanged,
required this.isRadar, required this.isRadar,
required this.currentIndex, required this.currentIndex,
required this.onMarkChanged,
}) : super(key: key); }) : super(key: key);
@override @override
@ -119,7 +121,11 @@ class _DidvanPageViewState extends State<DidvanPageView> {
runSpacing: 8, runSpacing: 8,
children: [ children: [
for (var i = 0; i < item.tags.length; i++) for (var i = 0; i < item.tags.length; i++)
TagItem(tag: item.tags[i]), TagItem(
tag: item.tags[i],
onMarkChanged: widget.onMarkChanged,
type: widget.isRadar ? 'radar' : 'news',
),
], ],
), ),
), ),