From b5ad9a8381ca5f56030679f38b27eb1a1dd146ec Mon Sep 17 00:00:00 2001 From: MarinaGaldi <231035722@aluno.unb.br> Date: Thu, 30 Jan 2025 16:53:14 -0300 Subject: [PATCH] =?UTF-8?q?feat(#65):=20Integra=C3=A7=C3=A3o=20com=20back?= =?UTF-8?q?=20e=20finaliza=C3=A7=C3=A3o=20do=20MVVM.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/access_trails_model.dart | 19 ++--- .../model/access_trails_request.dart | 17 +++- .../service/access_trails_service.dart | 33 ++++---- .../view/access_trails_view.dart | 80 +++++-------------- .../viewmodel/access_trails_viewmodel.dart | 18 ++--- 5 files changed, 64 insertions(+), 103 deletions(-) diff --git a/lib/ui/access_trails/model/access_trails_model.dart b/lib/ui/access_trails/model/access_trails_model.dart index 2253671..d19b6ff 100644 --- a/lib/ui/access_trails/model/access_trails_model.dart +++ b/lib/ui/access_trails/model/access_trails_model.dart @@ -3,7 +3,7 @@ import 'dart:convert'; class AccessTrailsModel { final String id; final String title; - final String description; + final String? description; AccessTrailsModel({ required this.id, @@ -11,20 +11,13 @@ class AccessTrailsModel { required this.description, }); - Map toJson() { - return { - 'id': id, - 'title': title, - 'description': description, - }; - } + factory AccessTrailsModel.fromJsonString(String jsonString) { + Map json = jsonDecode(jsonString); - factory AccessTrailsModel.fromJson(String jsonString) { - final Map 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", ); } } diff --git a/lib/ui/access_trails/model/access_trails_request.dart b/lib/ui/access_trails/model/access_trails_request.dart index b30433a..6e793f0 100644 --- a/lib/ui/access_trails/model/access_trails_request.dart +++ b/lib/ui/access_trails/model/access_trails_request.dart @@ -3,12 +3,21 @@ import 'dart:convert'; class AccessTrailsRequest { final String journeyId; - AccessTrailsRequest({required this.journeyId}); + AccessTrailsRequest({ + required this.journeyId, + }); - Map toJson() => {'journeyId': journeyId}; + Map toJson() { + return { + 'journeyId': journeyId, + }; + } factory AccessTrailsRequest.fromJsonString(String jsonString) { - final Map json = jsonDecode(jsonString); - return AccessTrailsRequest(journeyId: json['journeyId']); + final json = jsonDecode(jsonString); + + return AccessTrailsRequest( + journeyId: json['journeyId']! as String, + ); } } diff --git a/lib/ui/access_trails/service/access_trails_service.dart b/lib/ui/access_trails/service/access_trails_service.dart index d3e38d5..0a4191b 100644 --- a/lib/ui/access_trails/service/access_trails_service.dart +++ b/lib/ui/access_trails/service/access_trails_service.dart @@ -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> getTrails() async { - try { - Response response = await StudioMakerApi.getInstance().get(path: '/trails'); - List trailsList = response.data as List; + Future> getAccessTrails(AccessTrailsRequest accessTrailsRequest) async { + Response response = await StudioMakerApi.getInstance() + .get(path: '/journeys/subjects/${accessTrailsRequest.journeyId}'); - Log.i(trailsList); + List journeyList = response.data as List; - return trailsList.map((e) { - final Map trailsMap = e as Map; + 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 journeyMap = e as Map; + + 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; } } diff --git a/lib/ui/access_trails/view/access_trails_view.dart b/lib/ui/access_trails/view/access_trails_view.dart index 9ad1175..982937d 100644 --- a/lib/ui/access_trails/view/access_trails_view.dart +++ b/lib/ui/access_trails/view/access_trails_view.dart @@ -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'; @@ -13,75 +13,39 @@ class AccessTrails extends StatelessWidget { @override Widget build(BuildContext context) { - return ChangeNotifierProvider( - create: (_) => GetIt.instance(), - child: _AccessTrailsView(), + return ChangeNotifierProvider.value( + value: GetIt.instance(), + 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(context, listen: false); - AccessTrailsViewmodel viewModel = Provider.of(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> 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) { diff --git a/lib/ui/access_trails/viewmodel/access_trails_viewmodel.dart b/lib/ui/access_trails/viewmodel/access_trails_viewmodel.dart index 2869bbd..404542a 100644 --- a/lib/ui/access_trails/viewmodel/access_trails_viewmodel.dart +++ b/lib/ui/access_trails/viewmodel/access_trails_viewmodel.dart @@ -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> trailsCommand; + late Command1, String> getAccessTrailsCommand; AccessTrailsViewmodel() { - trailsCommand = Command0(_getTrails); - trailsCommand.execute(); + getAccessTrailsCommand = Command1(getAccessTrails); } - Future>> _getTrails() async { - final res = await GetIt.instance().getTrails(); - return Result.value(res); - } + Future>> getAccessTrails(String journeyId) async { + List res = await GetIt.instance() + .getAccessTrails(AccessTrailsRequest(journeyId: journeyId)); - Future> getTrails() async { - final result = await trailsCommand.execute(); - return result.asValue?.value ?? []; + return Result.value(res); } }