Flutter: использование веб-службы, предоставленной сгенерированным Dart-клиентом файлом из swaggerHub - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь разработать мобильное приложение с Flutter, используя IDE android studio, я использую swagger для генерации кода Dart-файлов, который содержит все веб-сервисы, как показано ниже: я перехожу к «swagger.io», затем явойдите в свою учетную запись в Swagger Hub, затем выберите «импортировать Api» и поместите URL-адрес моего веб-сервиса в поле «URL или путь».После этого я экспортирую этот файл как файл dart с именем «dart-client-Generated».Наконец, я импортирую этот файл в свой проект флаттера и добавил недостающие зависимости в pubspec.yaml.Я хочу использовать один из моих веб-сервисов, которые получают всю категорию и отображают ее в ListView на экране.Я подготовил пользовательский интерфейс в main.dart следующим образом:

     import 'package:flutter/material.dart';

        void main() => runApp(ListUserApp());

        class ListUserApp extends StatelessWidget {
          @override
          Widget build(BuildContext context) {
            return MaterialApp(
              title: 'User List 4Motors',
              home: ListUserScreen(),
            );
          }
        }

        class ListUserScreen extends StatefulWidget {
          @override
          State<StatefulWidget> createState() {
            return ListUserScreenState();
          }
        }

        class ListUserScreenState extends State<ListUserScreen> {
          @override
          Widget build(BuildContext context) {
            return MaterialApp(
              theme: ThemeData(
                primarySwatch: Colors.indigo,
              ),
              home: Scaffold(
                appBar: AppBar(
                  title: Text('User List 4Motors'),
                ),
                body: _buildListUser(),
              ),
            );
          }

            @override
      void initState() {
        super.initState();
        _getAllCategories();
      }

      void _getAllCategories() {
        print('Begin');
        try {
           new FrontEndServicesApi()
              .apiFrontEndServicesGetAllCategoriesProductGet()
              .then((categories) {
            print('Category: ');
            print(categories);
          });
        } catch (e) {
          print(e.toString());
        }
      }
            Widget _buildListUser() {
    return ListView.builder(itemBuilder: (context, position) {
      return Card(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Container(
            margin: const EdgeInsets.all(10.0),
            child: Row(
              children: <Widget>[
                Text(
                  'catagory',
                  //categories[position].toString(), // Category name
                  style: TextStyle(
                    fontSize: 22,
                  ),
                ),
              ],
            ),
          ),
        ),
      );
    });
  }
        }

Следуя модели категории, сгенерированной swagger:

part of swagger.api;

class CustomCategoryData {

  String id = null;


  Map<String, String> name = {};


  Map<String, String> description = {};


  String icon = null;


  String image = null;


  int order = null;


  String color = null;


  List<CustomSubCategory> subCategories = [];

  CustomCategoryData();

  @override
  String toString() {
    return 'CustomCategoryData[id=$id, name=$name, description=$description, icon=$icon, image=$image, order=$order, color=$color, subCategories=$subCategories, ]';
  }

  CustomCategoryData.fromJson(Map<String, dynamic> json) {
    if (json == null) return;
    id =
        json['id']
    ;
    name =
        json['name']
    ;
    description =
        json['description']
    ;
    icon =
        json['icon']
    ;
    image =
        json['image']
    ;
    order =
        json['order']
    ;
    color =
        json['color']
    ;
    subCategories =
      CustomSubCategory.listFromJson(json['subCategories'])
;
  }

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'name': name,
      'description': description,
      'icon': icon,
      'image': image,
      'order': order,
      'color': color,
      'subCategories': subCategories
     };
  }

  static List<CustomCategoryData> listFromJson(List<dynamic> json) {
    return json == null ? new List<CustomCategoryData>() : json.map((value) => new CustomCategoryData.fromJson(value)).toList();
  }

  static Map<String, CustomCategoryData> mapFromJson(Map<String, Map<String, dynamic>> json) {
    var map = new Map<String, CustomCategoryData>();
    if (json != null && json.length > 0) {
      json.forEach((String key, Map<String, dynamic> value) => map[key] = new CustomCategoryData.fromJson(value));
    }
    return map;
  }
}

И следующий код является классом FrontEndServicesApiсгенерировано swagger:

part of swagger.api;

class FrontEndServicesApi {
  final ApiClient apiClient;

  FrontEndServicesApi([ApiClient apiClient]) : apiClient = apiClient ?? defaultApiClient;

Future<List<CustomCategoryData>> apiFrontEndServicesGetAllCategoriesProductGet() async {
    Object postBody = null;

    // verify required params are set

    // create path and map variables
    String path = "/api/FrontEndServices/GetAllCategoriesProduct".replaceAll("{format}","json");

    // query params
    List<QueryParam> queryParams = [];
    Map<String, String> headerParams = {};
    Map<String, String> formParams = {};

    List<String> contentTypes = [];

    String contentType = contentTypes.length > 0 ? contentTypes[0] : "application/json";
    List<String> authNames = ["Bearer"];

    if(contentType.startsWith("multipart/form-data")) {
      bool hasFields = false;
      MultipartRequest mp = new MultipartRequest(null, null);

      if(hasFields)
        postBody = mp;
    }
    else {
          }

    var response = await apiClient.invokeAPI(path,
                                             'GET',
                                             queryParams,
                                             postBody,
                                             headerParams,
                                             formParams,
                                             contentType,
                                             authNames);

    if(response.statusCode >= 400) {
      throw new ApiException(response.statusCode, response.body);
    } else if(response.body != null) {
      return 
        (apiClient.deserialize(response.body, 'List<CustomCategoryData>') as List).map((item) => item as CustomCategoryData).toList();
    } else {
      return null;
    }
  }

Итак, когда я запускаю мое приложение для флаттера, появляется много ошибок:

Выполнение горячего перезапуска ... Синхронизация файлов на устройстве Android SDKпостроено для x86 ...

Сообщение компилятора: file: ///home/innovi/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart: 6: 8: ошибка: не найдена: 'dart: html' import 'dart: html';^ file: ///home/innovi/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart: 95: 25: Ошибка: введите HttpRequest ненайденный.void _openHttpRequest (запрос HttpRequest, метод String, URL-адрес строки, ^^^^^^^^^^^ file: ///home/innovi/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+ 1 / lib / src / browser_client.dart: 30: 25: Ошибка: «HttpRequest» не является типом. Final _xhrs = new Set (); ^^^^^^^^^^^ file: ///home / innovi / .pub-cache / hosted / pub.dartlang.org / http-0.12.0 + 1 / lib / src / browser_client.dart: 44: 19: ошибка: метод не найден: 'HttpRequest'. var xhr =новый файл HttpRequest (); ^^^^^^^^^^^ file: ///home/innovi/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart: 55: 45: Ошибка: метод не найден: «Blob». var blob = xhr.response == null? new Blob ([]): xhr.response; ^^^^ file: /// home /innovi / .pub-cache / hosted / pub.dartlang.org / http-0.12.0 + 1 / lib / src / browser_client.dart: 56: 24: ошибка: метод не найден: «FileReader». var reader = new FileReader(); ^^^^^^^^^^ file: ///home/innovi/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart: 55: 49: Ошибка: слишком много позиционных аргументов: 0 разрешено, но найдено 1. Tудалите лишние позиционные аргументы.var blob = xhr.response == ноль?новый BLOB-объект ([]): xhr.response;^ file: ///home/innovi/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart: 95: 25: ошибка: 'HttpRequest' isn 'т тип.void _openHttpRequest (запрос HttpRequest, метод String, URL-адрес строки, ^^^^^^^^^^^ file: ///home/innovi/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+ 1 / lib / src / browser_client.dart: 97: 13: Ошибка: метод 'open' не определен для класса 'invalid-type'. Попробуйте исправить имя с именем существующего метода или определитьметод с именем «open». request.open (метод, url, async: asynch, пользователь: пользователь, пароль: пароль); ^^^^ файл: ///home/innovi/.pub-cache/hosted/pub.dartlang.org / http-0.12.0 + 1 / lib / src / browser_client.dart: 105: 11: Ошибка: метод «abort» не определен для класса «invalid-type». Попробуйте исправить имя в соответствии с именемсуществующего метода или определение метода с именем 'abort'. xhr.abort (); ^^^^^ Перезапущенное приложение через 1 331 мс. I / flutter (10372): Начать E / flutter (10372): [ОШИБКА: flutter/lib/ui/ui_dart_state.cc(148)] Необработанное исключение: 'пакет: http / src / browser_client.dart': ошибка:Файл: ///home/innovi/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart: 44: 19: Ошибка: метод не найден: 'HttpRequest'. E / флаттер (10372): var xhr = новый HttpRequest (); E / flutter (10372): ^^^^^^^^^^^ E / flutter (10372): # 0 _AsyncAwaitCompleter.start (dart: async / runtime / libasync_patch.dart: 49: 6) E / flutter (10372): # 1
BrowserClient.send (пакет: http / src / browser_client.dart: 42: 32) E / flutter (10372): # 2 BaseClient._sendUnstreamed (пакет: http / src / base_client.dart: 169: 38) E / flutter (10372): E / flutter (10372): # 3 BaseClient.get (пакет: http / src / base_client.dart: 32: 7) E / flutter (10372): # 4
ApiClient.invokeAPI (Файл: ///home/innovi/development/FlutterProject/flutter_app_ws/lib/dart-client-generated/lib/api_client.dart: 193: 25) E / флаттер (10372): E / флаттер (10372): # 5
FrontEndServicesApi.apiFrontEndServicesGetAllCategoriesProductGet (Файл: ///home/innovi/development/FlutterProject/flutter_app_ws/lib/dart-client-generated/lib/api/front_end_services_api.dart: 886: 36) E / флаттер (10372): E / флаттер (10372): # 6
ListUserScreenState._getAllCategories (пакет: flutter_app_ws / main.dart: 51: 12) E / flutter (10372): # 7
ListUserScreenState.initState (пакет: flutter_app_ws / main.dart: 44: 5) E / flutter (10372): # 8 StatefulElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 3846: 58) E / flutter (10372): # 9 ComponentElement.mount (пакет: flutter / src / widgets / framework.dart: 3711: 5) E / flutter (10372):

10 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 2956: 14) E / flutter

(10372): # 11 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 2759: 12) E / flutter (10372): # 12 SingleChildRenderObjectElement.mount (пакет: flutter / src / widgets / framework.dart: 4876: 14) E / flutter (10372): # 13 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 2956: 14) E / flutter (10372): # 14 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 2759: 12) E / flutter (10372): # 15 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 3747: 16) E / flutter (10372): # 16 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 3559: 5) E / flutter (10372):

17 ComponentElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 3716: 5) E / flutter (10372):

18 ComponentElement.mount (пакет: флаттер / src / widgets / framework.dart: 3711: 5) E / флаттер (10372):

19 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 2956: 14) E / flutter

(10372): # 20 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 2759: 12) E / flutter (10372): # 21 SingleChildRenderObjectElement.mount (пакет: flutter / src / widgets / framework.dart: 4876: 14) E / flutter (10372): # 22 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 2956: 14) E / flutter (10372): # 23 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 2759: 12) E / flutter (10372): # 24 SingleChildRenderObjectElement.mount (пакет: flutter / src / widgets / framework.dart: 4876: 14) E / flutter (10372): # 25 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 2956: 14) E / flutter (10372): # 26 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 2759: 12) E / flutter (10372): # 27 SingleChildRenderObjectElement.mount (пакет: flutter / src / widgets / framework.dart: 4876: 14) E / flutter (10372): # 28 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 2956: 14) E / flutter (10372): # 29 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 2759: 12) E / flutter (10372): # 30 SingleChildRenderObjectElement.mount (пакет: flutter / src / widgets / framework.dart: 4876: 14) E / flutter (10372): # 31 Element.inflateWidget(пакет: flutter / src / widgets / framework.dart: 2956: 14) E / flutter (10372): # 32 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 2759: 12) E / flutter (10372): # 33 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 3747: 16) E / flutter (10372): # 34 Element.rebuild (пакет: flutter / src / widgets / framework.dart: 3559: 5) E / flutter (10372):

35 ComponentElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 3716: 5) E / flutter (10372):

36 StatefulElement._firstBuild (пакет: flutter / src / widgets / framework.dart: 3864: 11) E / flutter

(10372): # 37 ComponentElement.mount (пакет: flutter / src / widgets / framework.dart: 3711: 5) E / flutter (10372):

38 Element.inflateWidget (пакет: flutter / src / widgets / framework.dart: 2956: 14) E / flutter

(10372): # 39 Element.updateChild (пакет: flutter / src / widgets / framework.dart: 2759: 12) E / flutter (10372): # 40 ComponentElement.performRebuild (пакет: flutter / src / widgets / framework.dart: 3747: 16) E / flutter (10372): # 41 El

Итак, как я могу исправить эти ошибки, я застрял, может кто-нибудь мне помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...