From 6f93cfbbe75665ddd41a55b4fa3326b4d899e006 Mon Sep 17 00:00:00 2001 From: platoff84hz <105294265+platoff84hz@users.noreply.github.com> Date: Thu, 21 Nov 2024 18:17:10 +0400 Subject: [PATCH] 5try --- lib/data/dtos/ stocks_dto.dart | 29 ++++++++++++ lib/data/dtos/stocks_dto.g.dart | 20 ++++++++ lib/data/mappers/stock_mapper.dart | 11 +++++ lib/repositories/ mock_repository.dart | 27 +++++++++++ lib/repositories/api_interface.dart | 6 +++ lib/repositories/stock_repository.dart | 35 ++++++++++++++ pubspec.lock | 64 ++++++++++++++++++++++++++ pubspec.yaml | 4 ++ 8 files changed, 196 insertions(+) create mode 100644 lib/data/dtos/ stocks_dto.dart create mode 100644 lib/data/dtos/stocks_dto.g.dart create mode 100644 lib/data/mappers/stock_mapper.dart create mode 100644 lib/repositories/ mock_repository.dart create mode 100644 lib/repositories/api_interface.dart create mode 100644 lib/repositories/stock_repository.dart diff --git a/lib/data/dtos/ stocks_dto.dart b/lib/data/dtos/ stocks_dto.dart new file mode 100644 index 0000000..f97a416 --- /dev/null +++ b/lib/data/dtos/ stocks_dto.dart @@ -0,0 +1,29 @@ + +import 'dart:convert'; +import 'dart:ffi'; + +import 'package:json_annotation/json_annotation.dart'; + +part 'stocks_dto.g.dart'; + +@JsonSerializable(createToJson: false) +class StocksDto { + final List? stocks; + + const StocksDto({this.stocks}); + + factory StocksDto.fromJson(Map json) => _$StocksDtoFromJson(json); + +} + +@JsonSerializable(createToJson: false) +class StockDataDto { + final int? fdcId; + final String? name; + final double? price; + final String? image; + + const StockDataDto({this.fdcId, this.name, this.price, this.image}); + + factory StockDataDto.fromJson(Map json) => _$StockDataDtoFromJson(json); +} diff --git a/lib/data/dtos/stocks_dto.g.dart b/lib/data/dtos/stocks_dto.g.dart new file mode 100644 index 0000000..8eb0f1a --- /dev/null +++ b/lib/data/dtos/stocks_dto.g.dart @@ -0,0 +1,20 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'stocks_dto.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +StocksDto _$StocksDtoFromJson(Map json) => StocksDto( + foods: (json['stocks'] as List?) + ?.map((e) => StockDataDto.fromJson(e as Map)) + .toList(), +); + +StockDataDto _$StockDataDtoFromJson(Map json) => StockDataDto( + fdcId: (json['fdcId'] as num?)?.toInt(), + name: json['name'] as String?, + price: json['price'] as double?, + image: json['image'] as String?, +); diff --git a/lib/data/mappers/stock_mapper.dart b/lib/data/mappers/stock_mapper.dart new file mode 100644 index 0000000..cbd81a6 --- /dev/null +++ b/lib/data/mappers/stock_mapper.dart @@ -0,0 +1,11 @@ + +import 'package:flutter_project/data/dtos/stocks_dto.dart'; +import 'package:flutter_project/presentation/home_page/home_page.dart'; + + +extension CharacterDataDtoToModel on StockDataDto { + Stock toDomain() => Stock( + name: name ?? '', + price: price, + imageUrl: image); +} diff --git a/lib/repositories/ mock_repository.dart b/lib/repositories/ mock_repository.dart new file mode 100644 index 0000000..1f5c59c --- /dev/null +++ b/lib/repositories/ mock_repository.dart @@ -0,0 +1,27 @@ +import 'package:flutter_project/presentation/StockCategory.dart'; +import 'package:flutter_project/presentation/home_page/home_page.dart'; +import 'package:flutter_project/repositories/api_interface.dart'; + +class MockRepository extends ApiInterface { + @override + Future?> loadData() async { + return [ + Stock( + name: 'Алроса', + price: 52.90, + imageUrl: + 'https://data.cbonds.info/organisations_logos/18/1617957662ALROSA_Rus_COLOUR_RGB.jpg', + category: StockCategory.mining), + Stock( + name: 'Газпром', + price: 135.431111, + imageUrl: 'https://data.cbonds.info/organisations_logos/21/21.png', + category: StockCategory.oilgas), + Stock( + name: 'Сбербанк', + imageUrl: + 'https://data.cbonds.info/organisations_logos/313/1615279834sberbank__2-01.png', + category: StockCategory.finance), + ]; + } +} diff --git a/lib/repositories/api_interface.dart b/lib/repositories/api_interface.dart new file mode 100644 index 0000000..39352c0 --- /dev/null +++ b/lib/repositories/api_interface.dart @@ -0,0 +1,6 @@ + +import 'package:flutter_project/presentation/home_page/home_page.dart'; + +abstract class ApiInterface { + Future?> loadData(); +} diff --git a/lib/repositories/stock_repository.dart b/lib/repositories/stock_repository.dart new file mode 100644 index 0000000..a6a0c79 --- /dev/null +++ b/lib/repositories/stock_repository.dart @@ -0,0 +1,35 @@ +import 'package:flutter_project/presentation/home_page/home_page.dart'; +import 'package:flutter_project/data/dtos/stocks_dto.dart'; +import 'package:flutter_project/data/mappers/stock_mapper.dart'; +import 'package:flutter_project/repositories/api_interface.dart'; +import 'package:pretty_dio_logger/pretty_dio_logger.dart'; +import 'package:dio/dio.dart'; + + +class StockRepository extends ApiInterface { + static final Dio _dio = Dio() + ..interceptors.add( + PrettyDioLogger( + requestHeader: true, + requestBody: true, + )); + + static const String _baseUrl = 'https://api.nal.usda.gov'; + + @override + Future?> loadData({String? q}) async { // или вместо stock - stockcard + try { + final String searchQuery = q ?? 'Stock'; // Используем 'Stock' как значение по умолчанию + final String url = '$_baseUrl/fdc/v1/foods/search?api_key=91xPcWwfSGljSRMuoS8IH0GP4hM9QqwwtgSzqJMw&query=$searchQuery&pageSize=10'; + + final Response response = await _dio.get>(url); + + final StocksDto dto = StocksDto.fromJson(response.data as Map); + final List? data = dto.stocks?.map((e) => e.toDomain()).toList(); + return data; + } on DioException catch (e) { + // err + return null; + } + } +} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 1a77d25..1198cbf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -49,6 +49,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.8" + dio: + dependency: "direct main" + description: + name: dio + sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260" + url: "https://pub.dev" + source: hosted + version: "5.7.0" + dio_web_adapter: + dependency: transitive + description: + name: dio_web_adapter + sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8" + url: "https://pub.dev" + source: hosted + version: "2.0.0" equatable: dependency: transitive description: @@ -91,6 +107,22 @@ packages: description: flutter source: sdk version: "0.0.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + json_annotation: + dependency: "direct main" + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" leak_tracker: dependency: transitive description: @@ -155,6 +187,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.9.0" + pretty_dio_logger: + dependency: "direct main" + description: + name: pretty_dio_logger + sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" + url: "https://pub.dev" + source: hosted + version: "1.4.0" sky_engine: dependency: transitive description: flutter @@ -208,6 +248,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.2" + tinkoff_sdk: + dependency: "direct main" + description: + name: tinkoff_sdk + sha256: "20cc80ec6f57aa8ed499fb069075cc9d2b1361b369ea9159aad2c1663f54e191" + url: "https://pub.dev" + source: hosted + version: "0.6.0" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.dev" + source: hosted + version: "1.4.0" vector_math: dependency: transitive description: @@ -224,6 +280,14 @@ packages: url: "https://pub.dev" source: hosted version: "14.2.5" + web: + dependency: transitive + description: + name: web + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + url: "https://pub.dev" + source: hosted + version: "1.1.0" sdks: dart: ">=3.5.2 <4.0.0" flutter: ">=3.18.0-18.0.pre.54" diff --git a/pubspec.yaml b/pubspec.yaml index a8a4d82..3d8fdbe 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,7 +31,11 @@ dependencies: flutter: sdk: flutter + tinkoff_sdk: ^0.6.0 fl_chart: ^0.69.0 + json_annotation: ^4.8.1 + dio: ^5.4.2+1 + pretty_dio_logger: ^1.3.1 # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.8