Skip to content

Commit

Permalink
feat(#65): Integração com back e finalização do MVVM.
Browse files Browse the repository at this point in the history
  • Loading branch information
MarinaGaldi committed Jan 30, 2025
1 parent 7751971 commit b5ad9a8
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 103 deletions.
19 changes: 6 additions & 13 deletions lib/ui/access_trails/model/access_trails_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,21 @@ import 'dart:convert';
class AccessTrailsModel {
final String id;
final String title;
final String description;
final String? description;

AccessTrailsModel({
required this.id,
required this.title,
required this.description,
});

Map<String, dynamic> toJson() {
return <String, dynamic>{
'id': id,
'title': title,
'description': description,
};
}
factory AccessTrailsModel.fromJsonString(String jsonString) {
Map<String, dynamic> json = jsonDecode(jsonString);

factory AccessTrailsModel.fromJson(String jsonString) {
final Map<String, dynamic> json = jsonDecode(jsonString);
return AccessTrailsModel(
id: json['_id'] ?? 'Null',
title: json['title'] ?? 'Sem título',
description: json['description'] ?? 'Sem descrição',
id: json['_id'] as String? ?? "",
title: json['title'] as String? ?? "Sem título",
description: json['description'] as String? ?? "Sem descrição",
);
}
}
17 changes: 13 additions & 4 deletions lib/ui/access_trails/model/access_trails_request.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,21 @@ import 'dart:convert';
class AccessTrailsRequest {
final String journeyId;

AccessTrailsRequest({required this.journeyId});
AccessTrailsRequest({
required this.journeyId,
});

Map<String, dynamic> toJson() => {'journeyId': journeyId};
Map<String, dynamic> toJson() {
return <String, dynamic>{
'journeyId': journeyId,
};
}

factory AccessTrailsRequest.fromJsonString(String jsonString) {
final Map<String, dynamic> json = jsonDecode(jsonString);
return AccessTrailsRequest(journeyId: json['journeyId']);
final json = jsonDecode(jsonString);

return AccessTrailsRequest(
journeyId: json['journeyId']! as String,
);
}
}
33 changes: 16 additions & 17 deletions lib/ui/access_trails/service/access_trails_service.dart
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
import 'package:aranduapp/core/log/log.dart';
import 'package:aranduapp/core/network/studio_maker_api.dart';
import 'package:aranduapp/ui/access_trails/model/access_trails_model.dart';
import 'package:aranduapp/ui/access_trails/model/access_trails_request.dart';
import 'package:dio/dio.dart';

class AccessTrailsService {
Future<List<AccessTrailsModel>> getTrails() async {
try {
Response response = await StudioMakerApi.getInstance().get(path: '/trails');
List<dynamic> trailsList = response.data as List<dynamic>;
Future<List<AccessTrailsModel>> getAccessTrails(AccessTrailsRequest accessTrailsRequest) async {
Response response = await StudioMakerApi.getInstance()
.get(path: '/journeys/subjects/${accessTrailsRequest.journeyId}');

Log.i(trailsList);
List<dynamic> journeyList = response.data as List<dynamic>;

return trailsList.map((e) {
final Map<String, dynamic> trailsMap = e as Map<String, dynamic>;
Log.i(journeyList);

return AccessTrailsModel(
id: trailsMap['_id'] ?? "Null",
title: trailsMap['name'] ?? "Null",
description: trailsMap['description'] ?? "Null",
);
}).toList();
} catch (e) {
Log.e("Error fetching trails: $e");
rethrow;
}
var res = journeyList.map((e) {
final Map<String, dynamic> journeyMap = e as Map<String, dynamic>;

return AccessTrailsModel(
id: journeyMap['_id'] as String? ?? "",
title: journeyMap['title'] as String? ?? "Sem título",
description: journeyMap['description'] as String? ?? "Sem descrição");
}).toList();

return res;
}
}
80 changes: 22 additions & 58 deletions lib/ui/access_trails/view/access_trails_view.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:aranduapp/ui/access_trails/model/access_trails_model.dart';
import 'package:aranduapp/ui/access_trails/view/flecha.dart';
import 'package:aranduapp/ui/access_trails/viewmodel/access_trails_viewmodel.dart';
import 'package:aranduapp/ui/journey/model/journey_model.dart';
import 'package:aranduapp/ui/shared/erro_screen.dart';
Expand All @@ -13,75 +13,39 @@ class AccessTrails extends StatelessWidget {

@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<AccessTrailsViewmodel>(
create: (_) => GetIt.instance<AccessTrailsViewmodel>(),
child: _AccessTrailsView(),
return ChangeNotifierProvider<AccessTrailsViewmodel>.value(
value: GetIt.instance<AccessTrailsViewmodel>(),
child: _AccessTrailsScreen(journey: journey),
);
}
}


//////////return FutureBuilder(
////////// future: viewModel.getTrails(),
////////// builder: (context, snapshot) {
////////// if (snapshot.connectionState == ConnectionState.waiting) {
////////// return const Center(child: CircularProgressIndicator());
////////// } else if (snapshot.hasError) {
////////// return ErrorScreen(message: "adfasdfadf",);
////////// } else if (!snapshot.hasData || snapshot.data!.isEmpty) {
////////// return const Center(child: Text('Nenhuma trilha encontrada.'));
////////// }
////////// return _buildListView(snapshot);
////////// },
//////////);
class _AccessTrailsView extends StatelessWidget {

class _AccessTrailsScreen extends StatelessWidget {
final JourneyModel journey;

const _AccessTrailsView({super.key, required this.journey});
const _AccessTrailsScreen({required this.journey});

@override
Widget build(BuildContext context) {
final viewModel =
Provider.of<AccessTrailsViewmodel>(context, listen: false);

AccessTrailsViewmodel viewModel = Provider.of<AccessTrailsViewmodel>(context);


viewModel.trailsCommand.execute();
viewModel.getAccessTrailsCommand.execute(journey.id);

return Scaffold(
appBar: _buildAppBar(context),
body: ListenableBuilder(
listenable: viewModel.trailsCommand,
builder: (context, child) {

if (viewModel.trailsCommand.isOk )
return Text("asdfsdf");
else if ( viewModel.trailsCommand.isError)
return ErrorScreen( message: "Dasdf \n ${viewModel.trailsCommand.result!.asError!.error.toString()}")

return Text("asdfasdf");

}


)

);
}

ListView _buildListView(AsyncSnapshot<List<AccessTrailsModel>> snapshot) {
return ListView.builder(
padding: const EdgeInsets.all(16),
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
final trail = snapshot.data![index];
return ListTile(
title: Text(trail.title),
subtitle: Text(trail.description),
);
},
);
appBar: _buildAppBar(context),
body: ListenableBuilder(
listenable: viewModel.getAccessTrailsCommand,
builder: (context, child) {
if (viewModel.getAccessTrailsCommand.isOk)
return CorpoList();
else if (viewModel.getAccessTrailsCommand.isError)
return ErrorScreen(
message:
"Dasdf \n ${viewModel.getAccessTrailsCommand.result!.asError!.error.toString()}");

return Text("asdfasdf");
}));
}

AppBar _buildAppBar(BuildContext context) {
Expand Down
18 changes: 7 additions & 11 deletions lib/ui/access_trails/viewmodel/access_trails_viewmodel.dart
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
import 'package:aranduapp/core/state/command.dart';
import 'package:aranduapp/ui/access_trails/model/access_trails_model.dart';
import 'package:aranduapp/ui/access_trails/model/access_trails_request.dart';
import 'package:aranduapp/ui/access_trails/service/access_trails_service.dart';
import 'package:async/async.dart';
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';

class AccessTrailsViewmodel extends ChangeNotifier {

late Command0<List<AccessTrailsModel>> trailsCommand;
late Command1<List<AccessTrailsModel>, String> getAccessTrailsCommand;

AccessTrailsViewmodel() {
trailsCommand = Command0(_getTrails);
trailsCommand.execute();
getAccessTrailsCommand = Command1(getAccessTrails);
}

Future<Result<List<AccessTrailsModel>>> _getTrails() async {
final res = await GetIt.instance<AccessTrailsService>().getTrails();
return Result.value(res);
}
Future<Result<List<AccessTrailsModel>>> getAccessTrails(String journeyId) async {
List<AccessTrailsModel> res = await GetIt.instance<AccessTrailsService>()
.getAccessTrails(AccessTrailsRequest(journeyId: journeyId));

Future<List<AccessTrailsModel>> getTrails() async {
final result = await trailsCommand.execute();
return result.asValue?.value ?? [];
return Result.value(res);
}
}

0 comments on commit b5ad9a8

Please sign in to comment.