implemented marianum message dataloader
This commit is contained in:
parent
181682a424
commit
e57a1a915e
@ -7,11 +7,8 @@ import 'getMessagesResponse.dart';
|
|||||||
|
|
||||||
class GetMessages extends MhslApi<GetMessagesResponse> {
|
class GetMessages extends MhslApi<GetMessagesResponse> {
|
||||||
GetMessages() : super('message/messages.json');
|
GetMessages() : super('message/messages.json');
|
||||||
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
GetMessagesResponse assemble(String raw) => GetMessagesResponse.fromJson(jsonDecode(raw));
|
GetMessagesResponse assemble(String raw) => GetMessagesResponse.fromJson(jsonDecode(raw));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<http.Response> request(Uri uri) => http.get(uri);
|
Future<http.Response> request(Uri uri) => http.get(uri);
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,36 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
import 'dart:developer';
|
||||||
|
|
||||||
|
import 'package:dio/dio.dart';
|
||||||
|
|
||||||
abstract class DataLoader<TResult> {
|
abstract class DataLoader<TResult> {
|
||||||
Future<TResult> fetch();
|
final Dio dio;
|
||||||
|
DataLoader(this.dio) {
|
||||||
|
dio.options.connectTimeout = const Duration(seconds: 10).inMilliseconds;
|
||||||
|
dio.options.sendTimeout = const Duration(seconds: 30).inMilliseconds;
|
||||||
|
dio.options.receiveTimeout = const Duration(seconds: 30).inMilliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<TResult> run() async {
|
||||||
|
var response = await fetch();
|
||||||
|
try {
|
||||||
|
return assemble(DataLoaderResult(
|
||||||
|
json: jsonDecode(response.data!),
|
||||||
|
headers: response.headers.map.map((key, value) => MapEntry(key, value.join(';'))),
|
||||||
|
));
|
||||||
|
} catch(trace, e) {
|
||||||
|
log(trace.toString());
|
||||||
|
throw(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Response<String>> fetch();
|
||||||
|
TResult assemble(DataLoaderResult data);
|
||||||
|
}
|
||||||
|
|
||||||
|
class DataLoaderResult {
|
||||||
|
final Map<String, dynamic> json;
|
||||||
|
final Map<String, String> headers;
|
||||||
|
|
||||||
|
DataLoaderResult({required this.json, required this.headers});
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
|
||||||
|
import 'data_loader.dart';
|
||||||
|
|
||||||
|
abstract class MhslDataLoader<TResult> extends DataLoader<TResult> {
|
||||||
|
MhslDataLoader() : super(Dio(BaseOptions(
|
||||||
|
baseUrl: 'https://mhsl.eu/marianum/marianummobile/'
|
||||||
|
)));
|
||||||
|
}
|
@ -1,12 +1,12 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
|
||||||
import '../../../infrastructure/dataLoader/data_loader.dart';
|
import '../../../infrastructure/dataLoader/data_loader.dart';
|
||||||
|
import '../../../infrastructure/dataLoader/mhsl_data_loader.dart';
|
||||||
import '../bloc/marianum_message_state.dart';
|
import '../bloc/marianum_message_state.dart';
|
||||||
|
|
||||||
class MarianumMessageGetMessages extends DataLoader<MarianumMessageList> {
|
class MarianumMessageGetMessages extends MhslDataLoader<MarianumMessageList> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<MarianumMessageList> fetch() async {
|
Future<Response<String>> fetch() async => dio.get('/message/messages.json');
|
||||||
await Future.delayed(const Duration(seconds: 3));
|
@override
|
||||||
// throw UnimplementedError("Test");
|
MarianumMessageList assemble(DataLoaderResult data) => MarianumMessageList.fromJson(data.json);
|
||||||
return const MarianumMessageList(base: '', messages: [MarianumMessage(date: '', name: 'RepoTest', url: '')]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -3,5 +3,5 @@ import '../bloc/marianum_message_state.dart';
|
|||||||
import '../dataProvider/marianum_message_get_messages.dart';
|
import '../dataProvider/marianum_message_get_messages.dart';
|
||||||
|
|
||||||
class MarianumMessageRepository extends Repository<MarianumMessageState> {
|
class MarianumMessageRepository extends Repository<MarianumMessageState> {
|
||||||
Future<MarianumMessageList> getMessages() => MarianumMessageGetMessages().fetch();
|
Future<MarianumMessageList> getMessages() => MarianumMessageGetMessages().run();
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:provider/provider.dart';
|
|
||||||
|
|
||||||
import '../../../../../api/mhsl/message/getMessages/getMessagesResponse.dart';
|
import '../../../../../api/mhsl/message/getMessages/getMessagesResponse.dart';
|
||||||
import '../../../../../view/pages/more/message/messageView.dart';
|
import '../../../../../view/pages/more/message/messageView.dart';
|
||||||
import '../../../infrastructure/loadableState/loadable_state.dart';
|
import '../../../infrastructure/loadableState/loadable_state.dart';
|
||||||
import '../../../infrastructure/loadableState/view/loadable_state_consumer.dart';
|
import '../../../infrastructure/loadableState/view/loadable_state_consumer.dart';
|
||||||
import '../../../infrastructure/utilityWidgets/bloc_module.dart';
|
import '../../../infrastructure/utilityWidgets/bloc_module.dart';
|
||||||
import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart';
|
|
||||||
import '../bloc/marianum_message_bloc.dart';
|
import '../bloc/marianum_message_bloc.dart';
|
||||||
import '../bloc/marianum_message_state.dart';
|
import '../bloc/marianum_message_state.dart';
|
||||||
|
|
||||||
@ -19,10 +17,6 @@ class MarianumMessageListView extends StatelessWidget {
|
|||||||
child: (context, bloc, state) => Scaffold(
|
child: (context, bloc, state) => Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: const Text('Marianum Message'),
|
title: const Text('Marianum Message'),
|
||||||
actions: [
|
|
||||||
IconButton(onPressed: () => context.read<MarianumMessageBloc>().add(Emit((state) => const MarianumMessageState(messageList: MarianumMessageList(base: '', messages: [MarianumMessage(url: '', name: 'Teeest', date: 'now')])))), icon: const Icon(Icons.add)),
|
|
||||||
IconButton(onPressed: () => context.read<MarianumMessageBloc>().add(ClearState()), icon: const Icon(Icons.add))
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
body: LoadableStateConsumer<MarianumMessageBloc, MarianumMessageState>(
|
body: LoadableStateConsumer<MarianumMessageBloc, MarianumMessageState>(
|
||||||
child: (state, loading) => ListView.builder(
|
child: (state, loading) => ListView.builder(
|
||||||
@ -34,7 +28,7 @@ class MarianumMessageListView extends StatelessWidget {
|
|||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [Icon(Icons.newspaper)],
|
children: [Icon(Icons.newspaper)],
|
||||||
),
|
),
|
||||||
title: Text("${message.name}${loading ? "loading" : "notloading"}", overflow: TextOverflow.ellipsis),
|
title: Text(message.name, overflow: TextOverflow.ellipsis),
|
||||||
subtitle: Text('vom ${message.date}'),
|
subtitle: Text('vom ${message.date}'),
|
||||||
trailing: const Icon(Icons.arrow_right),
|
trailing: const Icon(Icons.arrow_right),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
|
@ -103,6 +103,7 @@ dependencies:
|
|||||||
freezed_annotation: ^2.4.1
|
freezed_annotation: ^2.4.1
|
||||||
connectivity_plus: ^6.0.3
|
connectivity_plus: ^6.0.3
|
||||||
hydrated_bloc: ^9.1.5
|
hydrated_bloc: ^9.1.5
|
||||||
|
dio: ^4.0.6
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user