[英]Use WebServices provided by Dart codegn generated by swagger in my Flutter app
我正在尝试使用 Flutter 开发一个移动应用程序,我使用 swagger 生成包含所有 Web 服务的 Dart 文件代码生成器。我想从 Web 服务中获取所有用户的列表。 在屏幕中,我想为每个用户显示:图像、名字、姓氏和电子邮件。 我在 main.dart 中准备了 UI 如下:
import 'package:flutter/material.dart';
import './utility.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(),
),
);
}
Widget _buildListUser() {
Utility test = new Utility();
print(test.getFirstNameUser());
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(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: const EdgeInsets.only(right: 15.0),
child: Image(
width: 65, image: AssetImage('assets/person.jpeg')), // Image of user
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'firstname & lastname', // first and last name of user
style: TextStyle(
fontSize: 22,
),
),
Container(
margin: const EdgeInsets.all(5.0),
child: Text('email'), // Email of user
),
],
),
],
),
),
),
);
});
}
}
并且,以下是 swagger 生成的用户模型:
part of swagger.api;
class UsersData {
String id = null;
String firstName = null;
String lastName = null;
String email = null;
String phone = null;
String image = null;
DateTime birthDay = null;
String fireBaseID = null;
String dealerID = null;
String type = null;
String provider = null;
DateTime registrationDate = null;
DateTime lastLogin = null;
bool allowComment = null;
bool isActive = null;
List<UserAddressData> addresses = [];
UsersData();
@override
String toString() {
return 'UsersData[id=$id, firstName=$firstName, lastName=$lastName, email=$email, phone=$phone, image=$image, birthDay=$birthDay, fireBaseID=$fireBaseID, dealerID=$dealerID, type=$type, provider=$provider, registrationDate=$registrationDate, lastLogin=$lastLogin, allowComment=$allowComment, isActive=$isActive, addresses=$addresses, ]';
}
UsersData.fromJson(Map<String, dynamic> json) {
if (json == null) return;
id = json['id'];
firstName = json['firstName'];
lastName = json['lastName'];
email = json['email'];
phone = json['phone'];
image = json['image'];
birthDay =
json['birthDay'] == null ? null : DateTime.parse(json['birthDay']);
fireBaseID = json['fireBaseID'];
dealerID = json['dealerID'];
type = json['type'];
provider = json['provider'];
registrationDate = json['registrationDate'] == null
? null
: DateTime.parse(json['registrationDate']);
lastLogin =
json['lastLogin'] == null ? null : DateTime.parse(json['lastLogin']);
allowComment = json['allowComment'];
isActive = json['isActive'];
addresses = UserAddressData.listFromJson(json['addresses']);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'firstName': firstName,
'lastName': lastName,
'email': email,
'phone': phone,
'image': image,
'birthDay': birthDay == null ? '' : birthDay.toUtc().toIso8601String(),
'fireBaseID': fireBaseID,
'dealerID': dealerID,
'type': type,
'provider': provider,
'registrationDate': registrationDate == null
? ''
: registrationDate.toUtc().toIso8601String(),
'lastLogin': lastLogin == null ? '' : lastLogin.toUtc().toIso8601String(),
'allowComment': allowComment,
'isActive': isActive,
'addresses': addresses
};
}
static List<UsersData> listFromJson(List<dynamic> json) {
return json == null
? new List<UsersData>()
: json.map((value) => new UsersData.fromJson(value)).toList();
}
static Map<String, UsersData> mapFromJson(
Map<String, Map<String, dynamic>> json) {
var map = new Map<String, UsersData>();
if (json != null && json.length > 0) {
json.forEach((String key, Map<String, dynamic> value) =>
map[key] = new UsersData.fromJson(value));
}
return map;
}
}
我创建了一个“Utility.dart”类,我在其中放置了一个方法来获取所有用户的名字列表,如下所示:
import 'package:flutter_app_ws/dart-client-generated/lib/api.dart';
class Utility {
UsersData user;
Utility();
List<String> getFirstNameUser() {
List<String> firstName = new List<String>();
firstName.add(user.firstName);
return firstName;
}
}
当我运行我的应用程序时,出现了很多错误,如下所示:
编译器消息:file:///home/innovi/development/flutter/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart:6:8: 错误: 未找到: 'dart:html' 导入 'dart:html'; ^ file:///home/innovi/development/flutter/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart:95:25:错误:类型未找到“HttpRequest”。 void _openHttpRequest(HttpRequest request, String method, String url, ^^^^^^^^^^^ file:///home/innovi/development/flutter/.pub-cache/hosted/pub.dartlang.org/http -0.12.0+1/lib/src/browser_client.dart:30:25: 错误:'HttpRequest' 不是一个类型。final _xhrs = new Set(); ^^^^^^^^^^^ lib /main.dart:63:27: 错误:需要一个标识符,但得到了 ','. , // 用户的名字和姓氏 ^ file:///home/innovi/development/flutter/.pub-cache/hosted /pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart:44:19: 错误:找不到方法:'HttpRequest'.var xhr = new HttpRequest(); ^^^^^ ^^^^^^ 文件:///home/innovi/development/flutter/.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/development/flutter/ .pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart:56:24: 错误:找不到方法:'FileReader'.var reader = new FileReader() ; ^^^^^^^^^^ 文件:///home/innovi/development/flutter/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client。 dart:55:49: 错误:位置参数太多:0 允许,但 1 找到。 尝试删除额外的位置参数。 var blob = xhr.response == null ? 新 Blob([]) : xhr.response; ^ file:///home/innovi/development/flutter/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart:95:25: 错误:' HttpRequest' 不是一种类型。 void _openHttpRequest(HttpRequest request, String method, String url, ^^^^^^^^^^^ file:///home/innovi/development/flutter/.pub-cache/hosted/pub.dartlang.org/http -0.12.0+1/lib/src/browser_client.dart:97:13: 错误:未为类“无效类型”定义方法“打开”。尝试将名称更正为现有方法的名称, 或者定义一个名为'open'的方法 request.open(method, url, async: asynch, user: user, password: password); ^^^^ file:///home/innovi/development/flutter/.pub -cache/hosted/pub.dartlang.org/http-0.12.0+1/lib/src/browser_client.dart:105:11: 错误:未为类“无效类型”定义方法“中止” . 尝试将名称更正为现有方法的名称,或定义名为“abort”的方法。 xhr.abort();
我想知道是什么问题,以及如何使用我的网络服务来获取和显示:所有用户的图像、名字/姓氏和电子邮件。
我能够使用2.4.2版的swagger-codgen为测试颤振项目生成 swagger 客户端,该客户端应该已经解决了这个问题。
java -jar swagger-codegen-cli-2.4.2.jar generate -l dart -i openapi.json -o swagger -DbrowserClient=false
重要标志: -DbrowserClient=false
并按照README.md
说明将生成的 swagger 库添加到我的测试 flutter 项目中:
当地的
要在本地驱动器中使用该包,请在 >pubspec.yaml 中包含以下内容
dependencies: swagger: path: /path/to/swagger
测试
去做
入门
请按照安装过程,然后运行以下命令:
import 'package:swagger/api.dart'; // TODO Configure API key authorization: api_key //swagger.api.Configuration.apiKey{'key'} = 'YOUR_API_KEY'; // uncomment below to setup prefix (eg Bearer) for API key, if needed //swagger.api.Configuration.apiKeyPrefix{'key'} = "Bearer"; var api_instance = new DefaultApi();
我只需要在pubspec.yaml
中的 swagger 库中明确指定环境。
name: swagger
version: 1.0.0
description: Swagger API client
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
http: '>=0.11.1 <0.12.0'
更新
java -jar openapi-generator-cli-3.3.4.jar generate -l dart -i openapi.json -o openapi -DbrowserClient=false
并以与 swagger 相同的方式README.md
。
我试过了,两种解决方案都有效。 开放 API 似乎比 swagger 客户端更准备好,因为我不需要在生成的开放 api 库的pubspec.yaml
中添加环境,但它是自动设置的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.