Commit 478d8063 authored by 杜欣's avatar 杜欣

Merge branch 'test' into featrue/duxin

# Conflicts:
#	lib/ClueModel/page/levelOne/LevelOnePage.dart
parents 4814802c 826c7070
...@@ -10,11 +10,11 @@ import 'package:gm_flutter/ClueModel/ClueRouterImpl.dart'; ...@@ -10,11 +10,11 @@ import 'package:gm_flutter/ClueModel/ClueRouterImpl.dart';
@Router("ClueRouter", ClueRouterImpl, true) @Router("ClueRouter", ClueRouterImpl, true)
abstract class ClueRouter implements RouterBaser { abstract class ClueRouter implements RouterBaser {
Widget getProjectDetailsPage(); Widget getProjectDetailsPage(Map<String,dynamic> params);
Widget getPlansCompareFeed(); Widget getPlansCompareFeed(Map<String,dynamic> params);
Widget getLevelOnePage(); Widget getLevelOnePage(Map<String,dynamic> params);
Widget getLevelTwoPage(); Widget getLevelTwoPage();
......
...@@ -5,23 +5,23 @@ ...@@ -5,23 +5,23 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter/src/widgets/framework.dart';
import 'package:gm_flutter/ClueModel/ClueRouter.dart'; import 'package:gm_flutter/ClueModel/ClueRouter.dart';
import 'package:gm_flutter/ClueModel/page/PlanCompareDetail/PlanCompareDetailPage.dart';
import 'package:gm_flutter/ClueModel/page/PlansCompareFeed/PlansCompareFeedPage.dart'; import 'package:gm_flutter/ClueModel/page/PlansCompareFeed/PlansCompareFeedPage.dart';
import 'package:gm_flutter/ClueModel/page/ProjectDetails/ProjectDetailsPage.dart'; import 'package:gm_flutter/ClueModel/page/ProjectDetails/ProjectDetailsPage.dart';
import 'package:gm_flutter/ClueModel/page/levelOne/LevelOnePage.dart'; import 'package:gm_flutter/ClueModel/page/levelOne/LevelOnePage.dart';
import 'package:gm_flutter/ClueModel/page/levelTwo/LevelTwoPage.dart'; import 'package:gm_flutter/ClueModel/page/levelTwo/LevelTwoPage.dart';
import 'package:gm_flutter/ClueModel/page/plan/PlanPage.dart'; import 'package:gm_flutter/ClueModel/page/plan/PlanPage.dart';
import 'package:gm_flutter/ClueModel/page/PlanCompareDetail/PlanCompareDetailPage.dart';
import 'package:gm_flutter/ClueModel/page/top/TopPage.dart'; import 'package:gm_flutter/ClueModel/page/top/TopPage.dart';
class ClueRouterImpl implements ClueRouter { class ClueRouterImpl implements ClueRouter {
@override @override
Widget getProjectDetailsPage() { Widget getProjectDetailsPage(Map<String, dynamic> params) {
return ProjectDetailsPage(1); return ProjectDetailsPage(params);
} }
@override @override
Widget getLevelOnePage() { Widget getLevelOnePage(Map<String, dynamic> params) {
return LevelOnePage(); return LevelOnePage(params);
} }
@override @override
...@@ -30,8 +30,8 @@ class ClueRouterImpl implements ClueRouter { ...@@ -30,8 +30,8 @@ class ClueRouterImpl implements ClueRouter {
} }
@override @override
Widget getPlansCompareFeed() { Widget getPlansCompareFeed(Map<String, dynamic> params) {
return PlansCompareFeedPage(123,1); return PlansCompareFeedPage(params);
} }
@override @override
......
...@@ -20,11 +20,9 @@ class PlansCompareFeedItemView extends StatefulWidget { ...@@ -20,11 +20,9 @@ class PlansCompareFeedItemView extends StatefulWidget {
class _PlansCompareFeedItemViewState class _PlansCompareFeedItemViewState
extends BaseState<PlansCompareFeedItemView> { extends BaseState<PlansCompareFeedItemView> {
ImageIcon _checked = ImageIcon(AssetImage("assets/icon_compare_select.png")); String _checked = "assets/icon_compare_select.png";
String _unchecked = "assets/icon_compare_unselect.png";
ImageIcon _unchecked = String _icon = "assets/icon_compare_unselect.png";
ImageIcon(AssetImage("assets/icon_compare_unselect.png"));
ImageIcon _icon = ImageIcon(AssetImage("assets/icon_compare_unselect.png"));
@override @override
Widget buildItem(BuildContext context) { Widget buildItem(BuildContext context) {
...@@ -48,10 +46,19 @@ class _PlansCompareFeedItemViewState ...@@ -48,10 +46,19 @@ class _PlansCompareFeedItemViewState
padding: EdgeInsets.only(top: 20, bottom: 20), padding: EdgeInsets.only(top: 20, bottom: 20),
child: Row( child: Row(
children: <Widget>[ children: <Widget>[
IconButton( GestureDetector(
icon: _icon, behavior: HitTestBehavior.opaque,
onPressed: () => onClickCheckBox(_icon), onTap: () => onClickCheckBox(_icon),
), child: Container(
alignment: Alignment.center,
child: ClipRRect(
child: Image.asset(
_icon,
width: 17,
height: 17,
fit: BoxFit.fill,
)),
)),
Container( Container(
margin: EdgeInsets.only(left: 15, right: 15), margin: EdgeInsets.only(left: 15, right: 15),
child: ClipRRect( child: ClipRRect(
...@@ -64,29 +71,33 @@ class _PlansCompareFeedItemViewState ...@@ -64,29 +71,33 @@ class _PlansCompareFeedItemViewState
), ),
), ),
), ),
Container( Expanded(
height: 50,
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Container(
margin: EdgeInsets.only(top: 2, bottom: 5), margin: EdgeInsets.only(top: 2, bottom: 8),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
baseText(widget.plan.name, 14, Color(0xFF282828), baseText(widget.plan.name, 14, Color(0xFF282828),
bold: true), bold: true),
baseText(" 好评率 ", 11, Color(0xFF282828)), Row(children: <Widget>[
baseText(widget.plan.positiveRate, 14, Color(0xFFFF5963), baseText("好评率 ", 11, Color(0xFF282828)),
bold: true), baseText(
widget.plan.positiveRate, 14, Color(0xFFFF5963),
bold: true)
]),
], ],
), ),
), ),
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[ children: <Widget>[
baseText('¥${widget.plan.minPrice}-${widget.plan.maxPrice}', baseText('¥${widget.plan.minPrice}-${widget.plan.maxPrice}',
13, Color(0xFFFF5963)), 13, Color(0xFFFF5963)),
baseText(" 销量${widget.plan.salesCount}", 11, baseText(
Color(0xFF282828)) "销量${widget.plan.salesCount}", 11, Color(0xFF282828))
], ],
) )
], ],
...@@ -105,38 +116,47 @@ class _PlansCompareFeedItemViewState ...@@ -105,38 +116,47 @@ class _PlansCompareFeedItemViewState
Container( Container(
margin: EdgeInsets.only(right: 15.0), margin: EdgeInsets.only(right: 15.0),
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: IconButton( child: GestureDetector(
icon: _icon, behavior: HitTestBehavior.opaque,
onPressed: () => onClickCheckBox(_icon), onTap: () => onClickCheckBox(_icon),
), child: Container(
alignment: Alignment.center,
child: ClipRRect(
child: Image.asset(
_icon,
width: 17,
height: 17,
fit: BoxFit.fill,
)),
)),
), ),
Column( Expanded(
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
children: <Widget>[ crossAxisAlignment: CrossAxisAlignment.start,
Container( children: <Widget>[
margin: EdgeInsets.only(top: 13.0, bottom: 12), Container(
child: baseText(widget.plan.name, 14, Color(0xFF282828), margin: EdgeInsets.only(top: 13.0, bottom: 12),
bold: true), child: baseText(widget.plan.name, 14, Color(0xFF282828),
), bold: true),
Row( ),
children: <Widget>[ Row(
baseText('¥${widget.plan.minPrice}-${widget.plan.maxPrice}', mainAxisAlignment: MainAxisAlignment.spaceBetween,
13, Color(0xFFFF5963)), children: <Widget>[
Container( baseText('¥${widget.plan.minPrice}-${widget.plan.maxPrice}',
width: 160, 13, Color(0xFFFF5963)),
alignment: Alignment.centerRight, baseText("指导价:¥${widget.plan.guidePrice}", 11,
child: baseText("指导价:¥${widget.plan.guidePrice}", 11, Color(0xFF282828)),
Color(0xFF282828))), ],
], ),
), ],
], ),
) )
], ],
), ),
); );
} }
onClickCheckBox(ImageIcon icon) { onClickCheckBox(String icon) {
if (icon == _checked) { if (icon == _checked) {
_icon = _unchecked; _icon = _unchecked;
} else { } else {
......
...@@ -5,11 +5,11 @@ ...@@ -5,11 +5,11 @@
**/ **/
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_boost/flutter_boost.dart';
import 'package:gm_flutter/ClueModel/page/PlansCompareFeed/PlansCompareFeedModel.dart'; import 'package:gm_flutter/ClueModel/page/PlansCompareFeed/PlansCompareFeedModel.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart'; import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
import 'package:gm_flutter/commonModel/base/BaseState.dart'; import 'package:gm_flutter/commonModel/base/BaseState.dart';
import 'package:gm_flutter/main.mark.dart';
import 'CallBackCompareItem.dart'; import 'CallBackCompareItem.dart';
import 'PlansCompareFeedItemView.dart'; import 'PlansCompareFeedItemView.dart';
...@@ -18,7 +18,10 @@ class PlansCompareFeedPage extends StatefulWidget { ...@@ -18,7 +18,10 @@ class PlansCompareFeedPage extends StatefulWidget {
int _planType; int _planType;
int _planId; int _planId;
PlansCompareFeedPage(this._planType, this._planId); PlansCompareFeedPage(Map<String, dynamic> params) {
this._planType = params["planType"];
this._planId = params["planId"];
}
@override @override
State<StatefulWidget> createState() => _PlansCompareFeedState(); State<StatefulWidget> createState() => _PlansCompareFeedState();
...@@ -75,7 +78,9 @@ class _PlansCompareFeedState extends BaseState<PlansCompareFeedPage> ...@@ -75,7 +78,9 @@ class _PlansCompareFeedState extends BaseState<PlansCompareFeedPage>
} }
if (item.error != 0) { if (item.error != 0) {
return errorItem(MediaQuery.of(context).size.width, return errorItem(MediaQuery.of(context).size.width,
MediaQuery.of(context).size.height, () {}); MediaQuery.of(context).size.height, () {
_model.init(widget._planType, widget._planId);
});
} }
return getList(item.data.plans); return getList(item.data.plans);
}, },
...@@ -107,9 +112,9 @@ class _PlansCompareFeedState extends BaseState<PlansCompareFeedPage> ...@@ -107,9 +112,9 @@ class _PlansCompareFeedState extends BaseState<PlansCompareFeedPage>
onClickCompare() { onClickCompare() {
if (_compareColor == Color(0xFFCCCCCC)) return; if (_compareColor == Color(0xFFCCCCCC)) return;
setState(() { setState(() {
Map<String, dynamic> map = {}; RouterCenterImpl()
map["ids"] = _setCompare; .findMainRouter()
FlutterBoost.singleton.open("sample", urlParams: map); .jumpPage(context, "pageName", {"ids": _setCompare}, false);
}); });
} }
......
...@@ -15,7 +15,9 @@ import '../../server/entity/ProjectDetailsItem.dart'; ...@@ -15,7 +15,9 @@ import '../../server/entity/ProjectDetailsItem.dart';
class ProjectDetailsPage extends StatefulWidget { class ProjectDetailsPage extends StatefulWidget {
int _planId; int _planId;
ProjectDetailsPage(this._planId); ProjectDetailsPage(Map<String, dynamic> params) {
this._planId = params["planId"];
}
@override @override
State<StatefulWidget> createState() => _ProjectDetailsState(); State<StatefulWidget> createState() => _ProjectDetailsState();
...@@ -62,24 +64,14 @@ class _ProjectDetailsState extends BaseState<ProjectDetailsPage> { ...@@ -62,24 +64,14 @@ class _ProjectDetailsState extends BaseState<ProjectDetailsPage> {
} }
ProjectDetailsItem item = data.data; ProjectDetailsItem item = data.data;
if (item == null || item.data == null || item.data.groups == null) { if (item == null || item.data == null || item.data.groups == null) {
return emptyItem(MediaQuery return emptyItem(MediaQuery.of(context).size.width,
.of(context) MediaQuery.of(context).size.height);
.size
.width,
MediaQuery
.of(context)
.size
.height);
} }
if (item.error != 0) { if (item.error != 0) {
return errorItem(MediaQuery return errorItem(MediaQuery.of(context).size.width,
.of(context) MediaQuery.of(context).size.height, () {
.size _model.init(widget._planId);
.width, });
MediaQuery
.of(context)
.size
.height, () {});
} }
return ListView.builder( return ListView.builder(
itemCount: item.data.groups.length, itemCount: item.data.groups.length,
......
...@@ -89,7 +89,9 @@ class LevelOneListState extends State<LevelOneList> ...@@ -89,7 +89,9 @@ class LevelOneListState extends State<LevelOneList>
color: Color(0xffF7F6FA), color: Color(0xffF7F6FA),
); );
} }
return LevelOneItem(_model.data[index]); return LevelOneItem(_model.data[index]
,lowPrice: (){
},);
}, },
childCount: _model.data.length + 1, childCount: _model.data.length + 1,
), ),
......
...@@ -10,27 +10,31 @@ import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart' ...@@ -10,27 +10,31 @@ import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'
as extend; as extend;
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gm_flutter/ClueModel/page/common/StickyTabBarDelegate.dart'; import 'package:gm_flutter/ClueModel/page/common/StickyTabBarDelegate.dart';
import 'package:gm_flutter/ClueModel/page/levelOne/LevelOneList.dart'; import 'package:gm_flutter/ClueModel/page/levelOne/LevelOneList.dart';
import 'package:gm_flutter/ClueModel/page/levelOne/LevelOneModel.dart'; import 'package:gm_flutter/ClueModel/page/levelOne/LevelOneModel.dart';
import 'package:gm_flutter/commonModel/GMBase.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart'; import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
import 'package:gm_flutter/commonModel/base/BaseState.dart'; import 'package:gm_flutter/commonModel/base/BaseState.dart';
import 'package:gm_flutter/commonModel/base/BaseUtil.dart';
import 'package:gm_flutter/commonModel/eventbus/SimpleEventBus.dart'; import 'package:gm_flutter/commonModel/eventbus/SimpleEventBus.dart';
import 'package:gm_flutter/commonModel/util/DartUtil.dart';
import 'package:gm_flutter/commonModel/view/baseRefreshIndicator.dart'; import 'package:gm_flutter/commonModel/view/baseRefreshIndicator.dart';
import 'package:gm_flutter/main.mark.dart'; import 'package:gm_flutter/main.mark.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart';
class LevelOnePage extends StatefulWidget { class LevelOnePage extends StatefulWidget {
int planId = 10;
Map<String, dynamic> params;
LevelOnePage(this.params) {
this.planId = params["planId"];
}
@override @override
State<StatefulWidget> createState() => LevelOneState(); State<StatefulWidget> createState() => LevelOneState();
} }
class LevelOneState extends BaseState<LevelOnePage> class LevelOneState extends BaseState<LevelOnePage>
with TickerProviderStateMixin { with TickerProviderStateMixin {
int planId = 10;
LevelOneModel _model = new LevelOneModel(); LevelOneModel _model = new LevelOneModel();
RefreshController _refreshController = RefreshController(); RefreshController _refreshController = RefreshController();
GlobalKey keyTop = new GlobalKey(); GlobalKey keyTop = new GlobalKey();
...@@ -46,6 +50,7 @@ class LevelOneState extends BaseState<LevelOnePage> ...@@ -46,6 +50,7 @@ class LevelOneState extends BaseState<LevelOnePage>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_model.plan_id = widget.planId;
_model.init(() { _model.init(() {
_initTabBar(); _initTabBar();
}); });
...@@ -164,7 +169,7 @@ class LevelOneState extends BaseState<LevelOnePage> ...@@ -164,7 +169,7 @@ class LevelOneState extends BaseState<LevelOnePage>
list.add(extend.NestedScrollViewInnerScrollPositionKeyWidget( list.add(extend.NestedScrollViewInnerScrollPositionKeyWidget(
Key("Tab${i}"), Key("Tab${i}"),
LevelOneList( LevelOneList(
planId, _model.tabsList[i].tabType, kToolbarHeight + d))); widget.planId, _model.tabsList[i].tabType, kToolbarHeight + d)));
} }
final double statusBarHeight = MediaQuery.of(context).padding.top; final double statusBarHeight = MediaQuery.of(context).padding.top;
final double pinnedHeaderHeight = statusBarHeight + kToolbarHeight; final double pinnedHeaderHeight = statusBarHeight + kToolbarHeight;
......
...@@ -46,6 +46,7 @@ class PlanModel extends BaseModel { ...@@ -46,6 +46,7 @@ class PlanModel extends BaseModel {
ClueApiImpl.getInstance() ClueApiImpl.getInstance()
.getPlan(DioUtil.getInstance().getDio()) .getPlan(DioUtil.getInstance().getDio())
.listen((event) { .listen((event) {
print("ERROR12 ${event.error}");
if (event.error == 0) { if (event.error == 0) {
projectData = event.data.tags; projectData = event.data.tags;
sortList = event.data.orders; sortList = event.data.orders;
...@@ -59,6 +60,7 @@ class PlanModel extends BaseModel { ...@@ -59,6 +60,7 @@ class PlanModel extends BaseModel {
}) })
.addToDispose(rxDispose) .addToDispose(rxDispose)
.onError((err) { .onError((err) {
print("ERROR12WCCCCCC ${err.toString()}");
PrintUtil.printBug(err); PrintUtil.printBug(err);
stateLive.notifyView(FAIL); stateLive.notifyView(FAIL);
}); });
......
...@@ -17,9 +17,12 @@ import 'package:gm_flutter/ClueModel/page/plan/SortView.dart'; ...@@ -17,9 +17,12 @@ import 'package:gm_flutter/ClueModel/page/plan/SortView.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlanBean.dart';
import 'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart'; import 'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart';
import 'package:gm_flutter/ClueModel/util/PosUtil.dart'; import 'package:gm_flutter/ClueModel/util/PosUtil.dart';
import 'package:gm_flutter/commonModel/App.dart';
import 'package:gm_flutter/commonModel/base/BaseComponent.dart'; import 'package:gm_flutter/commonModel/base/BaseComponent.dart';
import 'package:gm_flutter/commonModel/base/BaseState.dart'; import 'package:gm_flutter/commonModel/base/BaseState.dart';
import 'package:gm_flutter/commonModel/bean/Pair.dart'; import 'package:gm_flutter/commonModel/bean/Pair.dart';
import 'package:gm_flutter/commonModel/cache/CacheManager.dart';
import 'package:gm_flutter/commonModel/net/DioUtil.dart';
import 'package:gm_flutter/commonModel/popMenu/BaseMenuListener.dart'; import 'package:gm_flutter/commonModel/popMenu/BaseMenuListener.dart';
import 'package:gm_flutter/commonModel/popMenu/BasePopMenu.dart'; import 'package:gm_flutter/commonModel/popMenu/BasePopMenu.dart';
import 'package:gm_flutter/commonModel/util/DartUtil.dart'; import 'package:gm_flutter/commonModel/util/DartUtil.dart';
...@@ -50,6 +53,9 @@ class PlanState extends BaseState<PlanPage> with TickerProviderStateMixin { ...@@ -50,6 +53,9 @@ class PlanState extends BaseState<PlanPage> with TickerProviderStateMixin {
@override @override
void initState() { void initState() {
CacheManager.getInstance().get(MEMORY_CACHE).save(COOKIE,
"_gtid=3123e178b91a11eaa2d87e40d376ac134112; sessionid=pq9wf8equ4h26ia3yspzmquqn2rjs6mx; _gm_token=4091a81593419225");
DioUtil.getInstance().setProxy("172.30.8.245");
super.initState(); super.initState();
_model.init(); _model.init();
planBarView = planBarView =
...@@ -249,13 +255,16 @@ class PlanState extends BaseState<PlanPage> with TickerProviderStateMixin { ...@@ -249,13 +255,16 @@ class PlanState extends BaseState<PlanPage> with TickerProviderStateMixin {
child: loadingItem(), child: loadingItem(),
); );
} else if (data.data == FAIL) { } else if (data.data == FAIL) {
return errorItem( return Container(
MediaQuery.of(context).size.width, color: Colors.white,
MediaQuery.of(context).size.height, child: errorItem(
() { MediaQuery.of(context).size.width,
_model.stateLive.notifyView(LOADING); MediaQuery.of(context).size.height,
_model.init(); () {
}, _model.stateLive.notifyView(LOADING);
_model.init();
},
),
); );
} else { } else {
return Container( return Container(
......
...@@ -10,14 +10,22 @@ class PlanBean { ...@@ -10,14 +10,22 @@ class PlanBean {
UserType userType; UserType userType;
Data data; Data data;
PlanBean({this.error, this.message, this.extra, this.errorExtra, this.userType, this.data}); PlanBean(
{this.error,
this.message,
this.extra,
this.errorExtra,
this.userType,
this.data});
PlanBean.fromJson(Map<String, dynamic> json) { PlanBean.fromJson(Map<String, dynamic> json) {
error = json['error']; error = json['error'];
message = json['message']; message = json['message'];
extra = json['extra']; extra = json['extra'];
errorExtra = json['error_extra']; errorExtra = json['error_extra'];
userType = json['user_type'] != null ? new UserType.fromJson(json['user_type']) : null; userType = json['user_type'] != null
? new UserType.fromJson(json['user_type'])
: null;
data = json['data'] != null ? new Data.fromJson(json['data']) : null; data = json['data'] != null ? new Data.fromJson(json['data']) : null;
} }
...@@ -38,16 +46,14 @@ class PlanBean { ...@@ -38,16 +46,14 @@ class PlanBean {
} }
class UserType { class UserType {
UserType(); UserType();
UserType.fromJson(Map<String, dynamic> json) { UserType.fromJson(Map<String, dynamic> json) {}
}
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = new Map<String, dynamic>();
return data; return data;
} }
} }
class Data { class Data {
...@@ -61,19 +67,27 @@ class Data { ...@@ -61,19 +67,27 @@ class Data {
Data.fromJson(Map<String, dynamic> json) { Data.fromJson(Map<String, dynamic> json) {
if (json['ranks'] != null) { if (json['ranks'] != null) {
ranks = new List<Ranks>(); ranks = new List<Ranks>();
json['ranks'].forEach((v) { ranks.add(new Ranks.fromJson(v)); }); json['ranks'].forEach((v) {
ranks.add(new Ranks.fromJson(v));
});
} }
if (json['areas'] != null) { if (json['areas'] != null) {
areas = new List<Areas>(); areas = new List<Areas>();
json['areas'].forEach((v) { areas.add(new Areas.fromJson(v)); }); json['areas'].forEach((v) {
areas.add(new Areas.fromJson(v));
});
} }
if (json['tags'] != null) { if (json['tags'] != null) {
tags = new List<Tags>(); tags = new List<Tags>();
json['tags'].forEach((v) { tags.add(new Tags.fromJson(v)); }); json['tags'].forEach((v) {
tags.add(new Tags.fromJson(v));
});
} }
if (json['orders'] != null) { if (json['orders'] != null) {
orders = new List<Orders>(); orders = new List<Orders>();
json['orders'].forEach((v) { orders.add(new Orders.fromJson(v)); }); json['orders'].forEach((v) {
orders.add(new Orders.fromJson(v));
});
} }
} }
...@@ -96,6 +110,7 @@ class Data { ...@@ -96,6 +110,7 @@ class Data {
} }
class Ranks { class Ranks {
int id;
String name; String name;
String gmUrl; String gmUrl;
String icon; String icon;
...@@ -103,6 +118,7 @@ class Ranks { ...@@ -103,6 +118,7 @@ class Ranks {
Ranks({this.name, this.gmUrl, this.icon}); Ranks({this.name, this.gmUrl, this.icon});
Ranks.fromJson(Map<String, dynamic> json) { Ranks.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name']; name = json['name'];
gmUrl = json['gm_url']; gmUrl = json['gm_url'];
icon = json['icon']; icon = json['icon'];
...@@ -111,6 +127,7 @@ class Ranks { ...@@ -111,6 +127,7 @@ class Ranks {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name; data['name'] = this.name;
data['id'] = this.id;
data['gm_url'] = this.gmUrl; data['gm_url'] = this.gmUrl;
data['icon'] = this.icon; data['icon'] = this.icon;
return data; return data;
...@@ -129,7 +146,9 @@ class Areas { ...@@ -129,7 +146,9 @@ class Areas {
name = json['name']; name = json['name'];
if (json['groups'] != null) { if (json['groups'] != null) {
groups = new List<Groups>(); groups = new List<Groups>();
json['groups'].forEach((v) { groups.add(new Groups.fromJson(v)); }); json['groups'].forEach((v) {
groups.add(new Groups.fromJson(v));
});
} }
} }
...@@ -157,7 +176,9 @@ class Groups { ...@@ -157,7 +176,9 @@ class Groups {
initial = json['initial']; initial = json['initial'];
if (json['cities'] != null) { if (json['cities'] != null) {
cities = new List<Cities>(); cities = new List<Cities>();
json['cities'].forEach((v) { cities.add(new Cities.fromJson(v)); }); json['cities'].forEach((v) {
cities.add(new Cities.fromJson(v));
});
} }
title = json['title']; title = json['title'];
} }
...@@ -207,7 +228,9 @@ class Tags { ...@@ -207,7 +228,9 @@ class Tags {
id = json['id'].toString(); id = json['id'].toString();
if (json['sub_tags'] != null) { if (json['sub_tags'] != null) {
subTags = new List<SubTags>(); subTags = new List<SubTags>();
json['sub_tags'].forEach((v) { subTags.add(new SubTags.fromJson(v)); }); json['sub_tags'].forEach((v) {
subTags.add(new SubTags.fromJson(v));
});
} }
name = json['name']; name = json['name'];
} }
...@@ -260,4 +283,3 @@ class Orders { ...@@ -260,4 +283,3 @@ class Orders {
return data; return data;
} }
} }
...@@ -14,4 +14,6 @@ abstract class MainRouter extends RouterBaser { ...@@ -14,4 +14,6 @@ abstract class MainRouter extends RouterBaser {
Widget getTestPage(); Widget getTestPage();
void buriedEvent(String name, Map<String, dynamic> map); void buriedEvent(String name, Map<String, dynamic> map);
void jumpPage(BuildContext context,String pageName, Map<String, dynamic> params,bool nativePage);
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
* @date 2019-12-31 * @date 2019-12-31
**/ **/
import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter/src/widgets/framework.dart';
import 'package:gm_flutter/MainRouter/manager/JumpManager.dart';
import 'package:gm_flutter/MainRouter/manager/MainManager.dart'; import 'package:gm_flutter/MainRouter/manager/MainManager.dart';
import 'package:gm_flutter/MainRouter/page/test/TestPage.dart'; import 'package:gm_flutter/MainRouter/page/test/TestPage.dart';
...@@ -23,4 +24,10 @@ class MainRouterImpl implements MainRouter { ...@@ -23,4 +24,10 @@ class MainRouterImpl implements MainRouter {
void buriedEvent(String name, Map<String, dynamic> map) { void buriedEvent(String name, Map<String, dynamic> map) {
MainManager.getInstance().buriedEvent(name, map); MainManager.getInstance().buriedEvent(name, map);
} }
@override
void jumpPage(
BuildContext context, String pageName, Map<String, dynamic> params,bool nativePage) {
JumpManager.instance().jumpToPage(context, pageName, params,nativePage);
}
} }
/*
* @author lsy
* @date 2020/7/6
**/
import 'package:flutter/cupertino.dart';
import 'package:flutter_boost/flutter_boost.dart';
import 'package:flutter_common/commonModel/util/JumpUtil.dart';
import 'package:gm_flutter/MainRouter/manager/MainManager.dart';
import 'package:gm_flutter/main.mark.dart';
class JumpManager {
static JumpManager _instance;
JumpManager._() {}
static JumpManager instance() {
if (_instance == null) {
_instance = JumpManager._();
}
return _instance;
}
void jumpToPage(BuildContext context, String pageName,
Map<String, dynamic> params, bool nativePage) {
String pageNameWrap =
nativePage ? "gm://${pageName}" : "flutter://${pageName}";
if (!MainManager.getInstance().isInit) {
JumpUtil.jumpToPageRight(context, initMap(params)[pageNameWrap]);
} else {
FlutterBoost.singleton.open(pageName, urlParams: params);
}
}
Map<String, dynamic> initMap(Map<String, dynamic> params) {
return {
"flutter://clueLevelOne":
RouterCenterImpl().findClueRouter().getLevelOnePage(params),
"flutter://clueProjectDetails":
RouterCenterImpl().findClueRouter().getProjectDetailsPage(params),
"flutter://cluePlansCompareFeed":
RouterCenterImpl().findClueRouter().getPlansCompareFeed(params),
};
}
}
...@@ -4,7 +4,12 @@ ...@@ -4,7 +4,12 @@
**/ **/
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_boost/flutter_boost.dart'; import 'package:flutter_boost/flutter_boost.dart';
import 'package:gm_flutter/commonModel/GMBase.dart';
import 'package:gm_flutter/commonModel/base/BaseUtil.dart'; import 'package:gm_flutter/commonModel/base/BaseUtil.dart';
import 'package:gm_flutter/commonModel/cache/CacheManager.dart';
import 'package:gm_flutter/commonModel/util/DartUtil.dart';
import '../../commonModel/App.dart';
class MainManager { class MainManager {
MethodChannel flutterChannel; MethodChannel flutterChannel;
...@@ -31,10 +36,46 @@ class MainManager { ...@@ -31,10 +36,46 @@ class MainManager {
flutterChannel = MethodChannel('gm_method_channel'); flutterChannel = MethodChannel('gm_method_channel');
flutterEvent = EventChannel('gm_method_event'); flutterEvent = EventChannel('gm_method_event');
flutterEvent.receiveBroadcastStream().listen((data) { flutterEvent.receiveBroadcastStream().listen((data) {
print("LSY FLUTTER EVENT ${data}"); if (data is Map<String, String>) {
var map = Map<String, String>.from(data);
innerSetData(map, APP_NAME);
innerSetData(map, VERSION);
innerSetData(map, PLATFORM);
innerSetData(map, DEVICE_ID);
innerSetData(map, OS_VERSION);
innerSetData(map, MODEL);
innerSetData(map, SCREEN);
innerSetData(map, LAT);
innerSetData(map, LNG);
innerSetData(map, CHANNEL);
innerSetData(map, MANUFACTURER);
innerSetData(map, UUID);
innerSetData(map, ANDROID_DEVICE_ID);
innerSetData(map, CURRENT_CITY_ID);
innerSetData(map, USER_AGENT);
innerSetData(map, RELEASE);
innerSetData(map, IDFA);
innerSetData(map, IDFV);
innerSetData(map, IS_WIFI);
innerSetData(map, HARDWARE_MODEL);
innerSetData(map, USER_ID);
innerSetData(map, COOKIE);
innerSetData(map, BASE_URL);
DioUtil.setDefOptions(
baseUrl: map[BASE_URL] + "/",
cookie: map[COOKIE],
agent: map[USER_AGENT]);
DioUtil.getInstance().changeOpt();
}
}); });
} }
void innerSetData(Map<String, String> map, String str) {
if (!map[str].empty()) {
CacheManager.getInstance().get(MEMORY_CACHE).save(str, map[str]);
}
}
void buriedEvent(String name, Map<String, dynamic> map) { void buriedEvent(String name, Map<String, dynamic> map) {
if (!isInit) { if (!isInit) {
return; return;
......
...@@ -26,8 +26,11 @@ class TestState extends BaseState<TestPage> { ...@@ -26,8 +26,11 @@ class TestState extends BaseState<TestPage> {
JumpUtil.jumpToPageRight(context, NetProxyPage()); JumpUtil.jumpToPageRight(context, NetProxyPage());
})); }));
list.add(listItem("一级列表页", () { list.add(listItem("一级列表页", () {
JumpUtil.jumpToPageRight( // JumpUtil.jumpToPageRight(
context, RouterCenterImpl().findClueRouter().getLevelOnePage()); // context, RouterCenterImpl().findClueRouter().getLevelOnePage({"planId":137}));
RouterCenterImpl()
.findMainRouter()
.jumpPage(context, "clueLevelOne", {"planId": 137}, false);
})); }));
list.add(listItem("二级列表页", () { list.add(listItem("二级列表页", () {
JumpUtil.jumpToPageRight( JumpUtil.jumpToPageRight(
...@@ -43,11 +46,11 @@ class TestState extends BaseState<TestPage> { ...@@ -43,11 +46,11 @@ class TestState extends BaseState<TestPage> {
})); }));
list.add(listItem("项目说明", () { list.add(listItem("项目说明", () {
JumpUtil.jumpToPageRight( JumpUtil.jumpToPageRight(
context, RouterCenterImpl().findClueRouter().getProjectDetailsPage()); context, RouterCenterImpl().findClueRouter().getProjectDetailsPage({"planId":1}));
})); }));
list.add(listItem("方案对比", () { list.add(listItem("方案对比", () {
JumpUtil.jumpToPageRight( JumpUtil.jumpToPageRight(
context, RouterCenterImpl().findClueRouter().getPlansCompareFeed()); context, RouterCenterImpl().findClueRouter().getPlansCompareFeed({"planId":1,"planType":1}));
})); }));
list.add(listItem("榜单", () { list.add(listItem("榜单", () {
JumpUtil.jumpToPageRight( JumpUtil.jumpToPageRight(
......
/*
* @author lsy
* @date 2020/7/6
**/
const String APP_NAME="app_name";
const String VERSION="version";
const String PLATFORM="platform";
const String DEVICE_ID="device_id";
const String OS_VERSION="os_version";
const String MODEL="model";
const String SCREEN="screen";
const String LAT="lat";
const String LNG="lng";
const String CHANNEL="channel";
const String MANUFACTURER="manufacturer";
const String UUID="uuid";
const String ANDROID_DEVICE_ID="android_device_id";
const String CURRENT_CITY_ID="current_city_id";
const String RELEASE="release";
const String IDFA="idfa";
const String IDFV="idfv";
const String IS_WIFI="is_WiFi";
const String HARDWARE_MODEL="hardware_model";
//head
const String USER_AGENT="User-Agent";
const String COOKIE="cookie";
//user
const String USER_ID="user_id";
const String BASE_URL="base_url";
...@@ -148,7 +148,7 @@ Widget errorItem(double width, double height, VoidCallback retry, ...@@ -148,7 +148,7 @@ Widget errorItem(double width, double height, VoidCallback retry,
return Container( return Container(
width: width, width: width,
height: height, height: height,
padding: EdgeInsets.only(top: paddingTop), padding: EdgeInsets.only(top: paddingTop??0),
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
child: Container( child: Container(
width: 180, width: 180,
......
...@@ -19,7 +19,9 @@ const String APP_HOST_RELEASE = "https://x6cgr5y5-gengmei.mock.coding.io"; ...@@ -19,7 +19,9 @@ const String APP_HOST_RELEASE = "https://x6cgr5y5-gengmei.mock.coding.io";
*/ */
//const String APP_HOST_DEBUG = "http://backend.paas-merchant.envs"; //const String APP_HOST_DEBUG = "http://backend.paas-merchant.envs";
//const String APP_HOST_DEBUG = "http://doctor.paas-merchant.env"; //const String APP_HOST_DEBUG = "http://doctor.paas-merchant.env";
const String APP_HOST_DEBUG = "https://x6cgr5y5-gengmei.mock.coding.io"; //const String APP_HOST_DEBUG = "https://x6cgr5y5-gengmei.mock.coding.io";
const String APP_HOST_DEBUG = "http://backend.paas-merchant.env";
//const String APP_HOST_DEBUG = "http://janus.paas-merchant.env";
/** /**
* 开发环境 * 开发环境
......
...@@ -7,6 +7,7 @@ import 'dart:io'; ...@@ -7,6 +7,7 @@ import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:gm_flutter/commonModel/cache/CacheManager.dart'; import 'package:gm_flutter/commonModel/cache/CacheManager.dart';
import '../App.dart';
import 'DioUtil.dart'; import 'DioUtil.dart';
class DioInterceptorManager { class DioInterceptorManager {
...@@ -23,13 +24,104 @@ class DioInterceptorManager { ...@@ -23,13 +24,104 @@ class DioInterceptorManager {
InterceptorsWrapper getIntercept() { InterceptorsWrapper getIntercept() {
return new InterceptorsWrapper(onRequest: (opt) { return new InterceptorsWrapper(onRequest: (opt) {
if (CacheManager.getInstance().get(SHARE_CACHE).get(NET_COOKIE) != null) { if (opt.headers == null) {
if (opt.headers == null) { opt.headers = Map();
opt.headers = Map(); }
} if (CacheManager.getInstance().get(MEMORY_CACHE).get(COOKIE) != null) {
opt.headers[HttpHeaders.cookieHeader] = opt.headers[HttpHeaders.cookieHeader] =
CacheManager.getInstance().get(SHARE_CACHE).get(NET_COOKIE); CacheManager.getInstance().get(MEMORY_CACHE).get(COOKIE);
}
if (opt.queryParameters == null) {
opt.queryParameters = Map<String, dynamic>();
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(APP_NAME) != null) {
opt.queryParameters[APP_NAME] =
CacheManager.getInstance().get(MEMORY_CACHE).get(APP_NAME);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(VERSION) != null) {
opt.queryParameters[VERSION] =
CacheManager.getInstance().get(MEMORY_CACHE).get(VERSION);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(PLATFORM) != null) {
opt.queryParameters[PLATFORM] =
CacheManager.getInstance().get(MEMORY_CACHE).get(PLATFORM);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(DEVICE_ID) != null) {
opt.queryParameters[DEVICE_ID] =
CacheManager.getInstance().get(MEMORY_CACHE).get(DEVICE_ID);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(OS_VERSION) !=
null) {
opt.queryParameters[OS_VERSION] =
CacheManager.getInstance().get(MEMORY_CACHE).get(OS_VERSION);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(MODEL) != null) {
opt.queryParameters[MODEL] =
CacheManager.getInstance().get(MEMORY_CACHE).get(MODEL);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(SCREEN) != null) {
opt.queryParameters[SCREEN] =
CacheManager.getInstance().get(MEMORY_CACHE).get(SCREEN);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(LAT) != null) {
opt.queryParameters[LAT] =
CacheManager.getInstance().get(MEMORY_CACHE).get(LAT);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(LNG) != null) {
opt.queryParameters[LNG] =
CacheManager.getInstance().get(MEMORY_CACHE).get(LNG);
} }
if (CacheManager.getInstance().get(MEMORY_CACHE).get(CHANNEL) != null) {
opt.queryParameters[CHANNEL] =
CacheManager.getInstance().get(MEMORY_CACHE).get(CHANNEL);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(MANUFACTURER) !=
null) {
opt.queryParameters[MANUFACTURER] =
CacheManager.getInstance().get(MEMORY_CACHE).get(MANUFACTURER);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(UUID) != null) {
opt.queryParameters[UUID] =
CacheManager.getInstance().get(MEMORY_CACHE).get(UUID);
}
if (Platform.isAndroid) {
if (CacheManager.getInstance()
.get(MEMORY_CACHE)
.get(ANDROID_DEVICE_ID) !=
null) {
opt.queryParameters[ANDROID_DEVICE_ID] = CacheManager.getInstance()
.get(MEMORY_CACHE)
.get(ANDROID_DEVICE_ID);
}
} else {
if (CacheManager.getInstance().get(MEMORY_CACHE).get(RELEASE) != null) {
opt.queryParameters[RELEASE] =
CacheManager.getInstance().get(MEMORY_CACHE).get(RELEASE);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(IDFA) != null) {
opt.queryParameters[IDFA] =
CacheManager.getInstance().get(MEMORY_CACHE).get(IDFA);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(IDFV) != null) {
opt.queryParameters[IDFV] =
CacheManager.getInstance().get(MEMORY_CACHE).get(IDFV);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(IS_WIFI) != null) {
opt.queryParameters[IS_WIFI] =
CacheManager.getInstance().get(MEMORY_CACHE).get(IS_WIFI);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(HARDWARE_MODEL) !=
null) {
opt.queryParameters[HARDWARE_MODEL] =
CacheManager.getInstance().get(MEMORY_CACHE).get(HARDWARE_MODEL);
}
if (CacheManager.getInstance().get(MEMORY_CACHE).get(CURRENT_CITY_ID) !=
null) {
opt.queryParameters[CURRENT_CITY_ID] =
CacheManager.getInstance().get(MEMORY_CACHE).get(CURRENT_CITY_ID);
}
}
print("请求之前 onRequest${opt.headers}"); print("请求之前 onRequest${opt.headers}");
}, onResponse: (response) { }, onResponse: (response) {
print("响应之前 onResponse${response}"); print("响应之前 onResponse${response}");
......
...@@ -11,9 +11,9 @@ import 'DioInterceptor.dart'; ...@@ -11,9 +11,9 @@ import 'DioInterceptor.dart';
const NET_COOKIE = "NET_COOKIE"; const NET_COOKIE = "NET_COOKIE";
class DioUtil { class DioUtil {
static BaseOptions _options = BaseOptions();
static final DioUtil _instance = DioUtil._init(); static final DioUtil _instance = DioUtil._init();
static Dio _dio; static Dio _dio;
static BaseOptions _options = getDefOptions();
static Map<String, dynamic> addHeadMap; static Map<String, dynamic> addHeadMap;
...@@ -31,9 +31,15 @@ class DioUtil { ...@@ -31,9 +31,15 @@ class DioUtil {
static var interceptor = InterceptorsWrapper(); static var interceptor = InterceptorsWrapper();
DioUtil._init() { DioUtil._init() {
setDefOptions();
_dio = new Dio(_options);
_dio.interceptors.add(DioInterceptorManager.getInstance().getIntercept());
// _dio.interceptors.add(DioCookieManager.getInstance().getCookieManager());
}
void changeOpt() {
_dio = new Dio(_options); _dio = new Dio(_options);
_dio.interceptors.add(DioInterceptorManager.getInstance().getIntercept()); _dio.interceptors.add(DioInterceptorManager.getInstance().getIntercept());
_dio.interceptors.add(DioCookieManager.getInstance().getCookieManager());
} }
void clearCookie() { void clearCookie() {
...@@ -56,16 +62,19 @@ class DioUtil { ...@@ -56,16 +62,19 @@ class DioUtil {
return _dio; return _dio;
} }
static BaseOptions getDefOptions() { static void setDefOptions({String baseUrl, String cookie, String agent}) {
BaseOptions options = BaseOptions(); _options.connectTimeout = 10 * 1000;
options.connectTimeout = 10 * 1000; _options.receiveTimeout = 20 * 1000;
options.receiveTimeout = 20 * 1000; _options.responseType = ResponseType.plain;
options.responseType = ResponseType.plain;
Map<String, dynamic> headers = Map<String, dynamic>(); Map<String, dynamic> headers = Map<String, dynamic>();
headers['Accept'] = 'application/json'; headers['Accept'] = 'application/json';
headers['version'] = '1.0.0'; if (agent != null) {
options.headers = headers; headers['User-Agent'] = agent;
options.baseUrl = Api.getInstance().getBaseUrl() + "/"; }
return options; if (cookie != null) {
headers[HttpHeaders.cookieHeader] = cookie;
}
_options.headers = headers;
_options.baseUrl = baseUrl ?? Api.getInstance().getBaseUrl() + "/";
} }
} }
...@@ -55,4 +55,8 @@ extension StringExt on String { ...@@ -55,4 +55,8 @@ extension StringExt on String {
'^((13[0-9])|(15[^4])|(166)|(17[0-8])|(18[0-9])|(19[8-9])|(147,145))\\d{8}\$') '^((13[0-9])|(15[^4])|(166)|(17[0-8])|(18[0-9])|(19[8-9])|(147,145))\\d{8}\$')
.hasMatch(this); .hasMatch(this);
} }
bool empty() {
return this == null || this.isEmpty;
}
} }
...@@ -58,8 +58,8 @@ class MyApp extends State<MyAppWidget> { ...@@ -58,8 +58,8 @@ class MyApp extends State<MyAppWidget> {
void initState() { void initState() {
super.initState(); super.initState();
FlutterBoost.singleton.registerPageBuilders({ FlutterBoost.singleton.registerPageBuilders({
'demoPage': (pageName, params, _) { 'clueLevelOne': (pageName, params, _) {
return RouterCenterImpl().findClueRouter().getLevelOnePage(); return RouterCenterImpl().findClueRouter().getLevelOnePage(params);
}, },
'demoPage1': (pageName, params, _) { 'demoPage1': (pageName, params, _) {
return DemoPage1(); return DemoPage1();
......
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