Commit 2c467f3d authored by 朱璇's avatar 朱璇

对比详情

parent 54cb8cd7
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Flutter",
"request": "launch",
"type": "dart"
}
]
}
\ No newline at end of file
/*
* @Author: zx
* @Date: 2020-06-30 17:43:13
* @Last Modified by: zx
* @Last Modified time: 2020-06-30 22:01:01
*/
import 'package:flutter_common/commonModel/live/BaseModel.dart';
import 'package:flutter_common/commonModel/live/LiveData.dart';
import 'package:gm_flutter/ClueModel/server/api/ClueApi.serv.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanCompareDetail.dart';
import 'package:gm_flutter/commonModel/GMBase.dart';
import 'package:gm_flutter/commonModel/bean/Pair.dart';
import 'package:gm_flutter/commonModel/rx/RxDispose.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
class PlanCompareDetailModel extends BaseModel {
@override
void dispose() {
// showTab.dispost();
// cardsLive.dispost();
// appBarLive.dispost();
// rectLive.dispost();
// topIndexLive.dispost();
// topScrollLive.dispost();
}
}
\ No newline at end of file
/*
* @Author: zx
* @Date: 2020-06-30 17:40:43
* @Last Modified by: zx
* @Last Modified time: 2020-06-30 22:03:43
*/
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_common/commonModel/live/LiveData.dart';
import 'package:gm_flutter/ClueModel/page/PlanCompareDetail/PlanCompareDetailModel.dart';
import 'package:gm_flutter/ClueModel/util/PosUtil.dart';
import 'package:gm_flutter/ClueModel/view/FiveStarView.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
import 'package:gm_flutter/commonModel/base/BaseState.dart';
import 'package:gm_flutter/commonModel/util/DartUtil.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
class PlanCompareDetailPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => PlanCompareDetailPageState();
}
class PlanCompareDetailPageState extends BaseState<PlanCompareDetailPage> {
PlanCompareDetailModel _model = new PlanCompareDetailModel();
PageController pageController = new PageController();
double screenWidth;
List<Widget> oneList = new List();
@override
void initState() {
super.initState();
pageController.addListener(() {
if (screenWidth != null) {
// _model.topScrollLive.notifyView(
// pageController.offset / screenWidth * (screenWidth / 4));
}
});
// oneList.add(head());
// oneList.add(good());
// oneList.add(rect());
// oneList.add(explain());
// oneList.add(Container(
// height: 5,
// color: Color(0xffF7F6FA),
// ));
// oneList.add(feed());
// oneList.add(pages());
}
@override
void dispose() {
_model.dispose();
pageController.dispose();
// _refreshController.dispose();
pageController.dispose();
super.dispose();
}
@override
Widget buildItem(BuildContext context) {
screenWidth = MediaQuery.of(context).size.width;
return Scaffold();
}
}
......@@ -6,10 +6,13 @@ import 'package:flutter_common/Annotations/anno/Get.dart';
import 'package:flutter_common/Annotations/anno/Query.dart';
import 'package:flutter_common/Annotations/anno/ServiceCenter.dart';
import 'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanCompareDetail.dart';
@ServiceCenter()
abstract class ClueApi {
@Get("api/janus/plans/plan_feed")
LevelOneFeedList getLevelOneList(@Query("plan_id") int plan_id,
@Query("tab_type") String tab_type, @Query("page") int page);
@Get("api/janus/plans/compare")
PlanCompareDetail getPlanCompareDetail(@Query("plan_ids") List<int> plan_ids);
}
......@@ -15,6 +15,7 @@ import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanCompareDetail.dart';
const bool inProduction = const bool.fromEnvironment("dart.vm.product");
......@@ -49,6 +50,20 @@ class ClueApiImpl {
});
}
Stream<PlanCompareDetail> getPlanCompareDetail(Dio _dio, List<int> plan_ids) {
return Stream.fromFuture(get(_dio, 'api/janus/plans/compare', data: {
'plan_ids': plan_ids,
})).flatMap((value) {
if (value != null &&
(value.statusCode >= 200 && value.statusCode < 300)) {
return Stream.fromFuture(
compute(parsePlanCompareDetail, value.toString()));
} else {
throw Exception("--未知网络错误--");
}
});
}
///==================base method==================
Future<Response> get(Dio _dio, url, {data, options, cancelToken}) async {
......@@ -189,3 +204,7 @@ class ClueApiImpl {
LevelOneFeedList parseLevelOneFeedList(String value) {
return LevelOneFeedList.fromJson(json.decode(value));
}
PlanCompareDetail parsePlanCompareDetail(String value) {
return PlanCompareDetail.fromJson(json.decode(value));
}
/*
* @Author: zx
* @Date: 2020-06-30 19:31:32
* @Last Modified by: zx
* @Last Modified time: 2020-06-30 21:51:15
*/
import 'dart:convert';
class PlanCompareDetail {
int error;
String message;
Data data;
PlanCompareDetail({this.error, this.message, this.data});
PlanCompareDetail.fromJson(Map<String, dynamic> json) {
error = json['error'];
message = json['message'];
data = json['data'] != null ? new Data.fromJson(json['data']) : null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['error'] = this.error;
data['message'] = this.message;
if (this.data != null) {
data['data'] = this.data.toJson();
}
return data;
}
}
class Data {
List<Groups> groups;
Data({this.groups});
Data.fromJson(Map<String, dynamic> json) {
if (json['groups'] != null) {
groups = new List<Groups>();
json['groups'].forEach((v) { groups.add(new Groups.fromJson(v)); });
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.groups != null) {
data['groups'] = this.groups.map((v) => v.toJson()).toList();
}
return data;
}
}
class Groups {
String groupType;
String groupName;
List<Plans> plans;
Groups({this.groupType, this.groupName, this.plans});
Groups.fromJson(Map<String, dynamic> json) {
groupType = json['group_type'];
groupName = json['group_name'];
if (json['plans'] != null) {
plans = new List<Plans>();
json['plans'].forEach((v) { plans.add(new Plans.fromJson(v)); });
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['group_type'] = this.groupType;
data['group_name'] = this.groupName;
if (this.plans != null) {
data['plans'] = this.plans.map((v) => v.toJson()).toList();
}
return data;
}
}
class Plans {
int planId;
String planName;
String minPrice;
String maxPrice;
String positiveRate;
String salesCount;
List<Attrs> attrs;
Plans({this.planId, this.planName, this.minPrice, this.maxPrice, this.positiveRate, this.salesCount, this.attrs});
Plans.fromJson(Map<String, dynamic> json) {
planId = json['plan_id'];
planName = json['plan_name'];
minPrice = json['min_price'];
maxPrice = json['max_price'];
positiveRate = json['positive_rate'];
salesCount = json['sales_count'];
if (json['attrs'] != null) {
attrs = new List<Attrs>();
json['attrs'].forEach((v) { attrs.add(new Attrs.fromJson(v)); });
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['plan_id'] = this.planId;
data['plan_name'] = this.planName;
data['min_price'] = this.minPrice;
data['max_price'] = this.maxPrice;
data['positive_rate'] = this.positiveRate;
data['sales_count'] = this.salesCount;
if (this.attrs != null) {
data['attrs'] = this.attrs.map((v) => v.toJson()).toList();
}
return data;
}
}
class Attrs {
String attrName;
String attrValue;
Attrs({this.attrName, this.attrValue});
Attrs.fromJson(Map<String, dynamic> json) {
attrName = json['attr_name'];
attrValue = json['attr_value'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['attr_name'] = this.attrName;
data['attr_value'] = this.attrValue;
return data;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment