D1APP-104 hashtags beta
This commit is contained in:
parent
911d992dee
commit
8fee5e2ca7
|
|
@ -1,9 +1,12 @@
|
||||||
|
import 'package:didvan/models/tag.dart';
|
||||||
import 'package:didvan/views/authentication/authentication.dart';
|
import 'package:didvan/views/authentication/authentication.dart';
|
||||||
import 'package:didvan/views/authentication/authentication_state.dart';
|
import 'package:didvan/views/authentication/authentication_state.dart';
|
||||||
import 'package:didvan/views/home/comments/comments.dart';
|
import 'package:didvan/views/home/comments/comments.dart';
|
||||||
import 'package:didvan/views/home/comments/comments_state.dart';
|
import 'package:didvan/views/home/comments/comments_state.dart';
|
||||||
import 'package:didvan/views/home/direct/direct.dart';
|
import 'package:didvan/views/home/direct/direct.dart';
|
||||||
import 'package:didvan/views/home/direct/direct_state.dart';
|
import 'package:didvan/views/home/direct/direct_state.dart';
|
||||||
|
import 'package:didvan/views/home/hashtag/hashtag.dart';
|
||||||
|
import 'package:didvan/views/home/hashtag/hashtag_state.dart';
|
||||||
import 'package:didvan/views/home/home.dart';
|
import 'package:didvan/views/home/home.dart';
|
||||||
import 'package:didvan/views/home/home_state.dart';
|
import 'package:didvan/views/home/home_state.dart';
|
||||||
import 'package:didvan/views/home/news/news_details/news_details.dart';
|
import 'package:didvan/views/home/news/news_details/news_details.dart';
|
||||||
|
|
@ -121,6 +124,14 @@ class RouteGenerator {
|
||||||
child: const Bookmarks(),
|
child: const Bookmarks(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
case Routes.hashtag:
|
||||||
|
return _createRoute(
|
||||||
|
ChangeNotifierProvider<HashtagState>(
|
||||||
|
create: (context) => HashtagState(),
|
||||||
|
child: Hashtag(tag: settings.arguments as Tag),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
case Routes.filteredBookmarks:
|
case Routes.filteredBookmarks:
|
||||||
return _createRoute(
|
return _createRoute(
|
||||||
ChangeNotifierProvider<FilteredBookmarksState>(
|
ChangeNotifierProvider<FilteredBookmarksState>(
|
||||||
|
|
|
||||||
|
|
@ -14,4 +14,5 @@ class Routes {
|
||||||
static const String bookmarks = '/bookmarks';
|
static const String bookmarks = '/bookmarks';
|
||||||
static const String filteredBookmarks = '/filtered-bookmarks';
|
static const String filteredBookmarks = '/filtered-bookmarks';
|
||||||
static const String imageCropper = '/image-cropper';
|
static const String imageCropper = '/image-cropper';
|
||||||
|
static const String hashtag = '/hashtag';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import 'package:didvan/models/requests/news.dart';
|
||||||
import 'package:didvan/models/requests/radar.dart';
|
import 'package:didvan/models/requests/radar.dart';
|
||||||
|
|
||||||
class RequestHelper {
|
class RequestHelper {
|
||||||
static const String baseUrl = 'https://test.api.didvan.app';
|
static const String baseUrl = 'https://api.didvan.app';
|
||||||
static const String _baseUserUrl = baseUrl + '/user';
|
static const String _baseUserUrl = baseUrl + '/user';
|
||||||
static const String _baseRadarUrl = baseUrl + '/radar';
|
static const String _baseRadarUrl = baseUrl + '/radar';
|
||||||
static const String _baseNewsUrl = baseUrl + '/news';
|
static const String _baseNewsUrl = baseUrl + '/news';
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
import 'package:didvan/models/tag.dart';
|
import 'package:didvan/models/tag.dart';
|
||||||
import 'package:didvan/models/view/app_bar_data.dart';
|
import 'package:didvan/models/view/app_bar_data.dart';
|
||||||
|
import 'package:didvan/views/home/hashtag/hashtag_state.dart';
|
||||||
|
import 'package:didvan/views/home/widgets/news_overview.dart';
|
||||||
|
import 'package:didvan/views/home/widgets/radar_overview.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/scaffold.dart';
|
import 'package:didvan/views/widgets/didvan/scaffold.dart';
|
||||||
|
import 'package:didvan/views/widgets/state_handlers/sliver_state_handler.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class Hashtag extends StatefulWidget {
|
class Hashtag extends StatefulWidget {
|
||||||
final Tag tag;
|
final Tag tag;
|
||||||
|
|
@ -12,10 +17,44 @@ class Hashtag extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _HashtagState extends State<Hashtag> {
|
class _HashtagState extends State<Hashtag> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
final state = context.read<HashtagState>();
|
||||||
|
state.id = widget.tag.id;
|
||||||
|
Future.delayed(Duration.zero, () => state.getTagItems(page: 1));
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
@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: widget.tag.label, hasBack: true),
|
||||||
|
slivers: [
|
||||||
|
Consumer<HashtagState>(
|
||||||
|
builder: (context, state, child) => SliverStateHandler<HashtagState>(
|
||||||
|
state: state,
|
||||||
|
builder: (context, state, index) {
|
||||||
|
final item = state.items[index];
|
||||||
|
final type = item.type;
|
||||||
|
if (type == 'radar') {
|
||||||
|
return RadarOverview(
|
||||||
|
radar: item,
|
||||||
|
onCommentsChanged: (id, count) => item.comments = count,
|
||||||
|
onMarkChanged: (id, value) => item.marked = value,
|
||||||
|
);
|
||||||
|
} else if (type == 'news') {
|
||||||
|
return NewsOverview(
|
||||||
|
news: item,
|
||||||
|
onMarkChanged: (id, value) => item.marked = value,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return Container();
|
||||||
|
},
|
||||||
|
childCount: state.items.length,
|
||||||
|
onRetry: () {},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,34 @@
|
||||||
import 'package:didvan/models/enums.dart';
|
import 'package:didvan/models/enums.dart';
|
||||||
|
import 'package:didvan/models/overview_data.dart';
|
||||||
import 'package:didvan/providers/core_provider.dart';
|
import 'package:didvan/providers/core_provider.dart';
|
||||||
import 'package:didvan/services/network/request.dart';
|
import 'package:didvan/services/network/request.dart';
|
||||||
import 'package:didvan/services/network/request_helper.dart';
|
import 'package:didvan/services/network/request_helper.dart';
|
||||||
|
|
||||||
class HashtagState extends CoreProvier {
|
class HashtagState extends CoreProvier {
|
||||||
|
final List<OverviewData> items = [];
|
||||||
|
|
||||||
late final int id;
|
late final int id;
|
||||||
int page = 1;
|
int page = 1;
|
||||||
|
|
||||||
Future<void> getTagItems({required int page}) async {
|
Future<void> getTagItems({required int page}) async {
|
||||||
|
this.page = page;
|
||||||
|
if (this.page == 1) {
|
||||||
appState = AppState.busy;
|
appState = AppState.busy;
|
||||||
|
}
|
||||||
final service = RequestService(RequestHelper.tag(
|
final service = RequestService(RequestHelper.tag(
|
||||||
ids: [id],
|
ids: [id],
|
||||||
limit: 15,
|
limit: 15,
|
||||||
page: page,
|
page: page,
|
||||||
));
|
));
|
||||||
await service.httpGet();
|
await service.httpGet();
|
||||||
if (service.isSuccess) {}
|
if (service.isSuccess) {
|
||||||
|
final contents = service.result['contents'];
|
||||||
|
for (var i = 0; i < contents.length; i++) {
|
||||||
|
items.add(OverviewData.fromJson(contents[i]));
|
||||||
|
}
|
||||||
|
appState = AppState.idle;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
appState = AppState.failed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,27 @@
|
||||||
import 'package:didvan/config/design_config.dart';
|
import 'package:didvan/config/design_config.dart';
|
||||||
import 'package:didvan/config/theme_data.dart';
|
import 'package:didvan/config/theme_data.dart';
|
||||||
import 'package:didvan/constants/app_icons.dart';
|
import 'package:didvan/constants/app_icons.dart';
|
||||||
|
import 'package:didvan/models/tag.dart';
|
||||||
|
import 'package:didvan/routes/routes.dart';
|
||||||
import 'package:didvan/views/widgets/didvan/text.dart';
|
import 'package:didvan/views/widgets/didvan/text.dart';
|
||||||
|
import 'package:didvan/views/widgets/ink_wrapper.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class TagItem extends StatelessWidget {
|
class TagItem extends StatelessWidget {
|
||||||
final String label;
|
final Tag tag;
|
||||||
|
|
||||||
const TagItem({
|
const TagItem({
|
||||||
Key? key,
|
Key? key,
|
||||||
required this.label,
|
required this.tag,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Container(
|
return InkWrapper(
|
||||||
|
borderRadius: DesignConfig.lowBorderRadius,
|
||||||
|
onPressed: () =>
|
||||||
|
Navigator.of(context).pushNamed(Routes.hashtag, arguments: tag),
|
||||||
|
child: Container(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
vertical: 4,
|
vertical: 4,
|
||||||
horizontal: 8,
|
horizontal: 8,
|
||||||
|
|
@ -33,12 +40,13 @@ class TagItem extends StatelessWidget {
|
||||||
color: Theme.of(context).colorScheme.focusedBorder,
|
color: Theme.of(context).colorScheme.focusedBorder,
|
||||||
),
|
),
|
||||||
DidvanText(
|
DidvanText(
|
||||||
label,
|
tag.label,
|
||||||
color: Theme.of(context).colorScheme.focusedBorder,
|
color: Theme.of(context).colorScheme.focusedBorder,
|
||||||
style: Theme.of(context).textTheme.bodyText1,
|
style: Theme.of(context).textTheme.bodyText1,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ 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(label: item.tags[i].label),
|
TagItem(tag: item.tags[i]),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue