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_state.dart';
|
||||
import 'package:didvan/views/home/comments/comments.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_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_state.dart';
|
||||
import 'package:didvan/views/home/news/news_details/news_details.dart';
|
||||
|
|
@ -121,6 +124,14 @@ class RouteGenerator {
|
|||
child: const Bookmarks(),
|
||||
),
|
||||
);
|
||||
case Routes.hashtag:
|
||||
return _createRoute(
|
||||
ChangeNotifierProvider<HashtagState>(
|
||||
create: (context) => HashtagState(),
|
||||
child: Hashtag(tag: settings.arguments as Tag),
|
||||
),
|
||||
);
|
||||
|
||||
case Routes.filteredBookmarks:
|
||||
return _createRoute(
|
||||
ChangeNotifierProvider<FilteredBookmarksState>(
|
||||
|
|
|
|||
|
|
@ -14,4 +14,5 @@ class Routes {
|
|||
static const String bookmarks = '/bookmarks';
|
||||
static const String filteredBookmarks = '/filtered-bookmarks';
|
||||
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';
|
||||
|
||||
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 _baseRadarUrl = baseUrl + '/radar';
|
||||
static const String _baseNewsUrl = baseUrl + '/news';
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
import 'package:didvan/models/tag.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/state_handlers/sliver_state_handler.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class Hashtag extends StatefulWidget {
|
||||
final Tag tag;
|
||||
|
|
@ -12,10 +17,44 @@ class Hashtag extends StatefulWidget {
|
|||
}
|
||||
|
||||
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
|
||||
Widget build(BuildContext context) {
|
||||
return DidvanScaffold(
|
||||
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/overview_data.dart';
|
||||
import 'package:didvan/providers/core_provider.dart';
|
||||
import 'package:didvan/services/network/request.dart';
|
||||
import 'package:didvan/services/network/request_helper.dart';
|
||||
|
||||
class HashtagState extends CoreProvier {
|
||||
final List<OverviewData> items = [];
|
||||
|
||||
late final int id;
|
||||
int page = 1;
|
||||
|
||||
Future<void> getTagItems({required int page}) async {
|
||||
this.page = page;
|
||||
if (this.page == 1) {
|
||||
appState = AppState.busy;
|
||||
}
|
||||
final service = RequestService(RequestHelper.tag(
|
||||
ids: [id],
|
||||
limit: 15,
|
||||
page: page,
|
||||
));
|
||||
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/theme_data.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/ink_wrapper.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
class TagItem extends StatelessWidget {
|
||||
final String label;
|
||||
final Tag tag;
|
||||
|
||||
const TagItem({
|
||||
Key? key,
|
||||
required this.label,
|
||||
required this.tag,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
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(
|
||||
vertical: 4,
|
||||
horizontal: 8,
|
||||
|
|
@ -33,12 +40,13 @@ class TagItem extends StatelessWidget {
|
|||
color: Theme.of(context).colorScheme.focusedBorder,
|
||||
),
|
||||
DidvanText(
|
||||
label,
|
||||
tag.label,
|
||||
color: Theme.of(context).colorScheme.focusedBorder,
|
||||
style: Theme.of(context).textTheme.bodyText1,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ class _DidvanPageViewState extends State<DidvanPageView> {
|
|||
runSpacing: 8,
|
||||
children: [
|
||||
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