Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
gm_flutter
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
林生雨
gm_flutter
Commits
095cf284
Commit
095cf284
authored
Jul 01, 2020
by
林生雨
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'zcc/flutter' into 'test'
Zcc/flutter See merge request
!1
parents
cac886d2
869a3860
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
752 additions
and
22 deletions
+752
-22
ClueRouter.dart
lib/ClueModel/ClueRouter.dart
+7
-5
ClueRouterImpl.dart
lib/ClueModel/ClueRouterImpl.dart
+12
-0
PlansCompareFeedItemView.dart
...Model/page/PlansCompareFeed/PlansCompareFeedItemView.dart
+143
-0
PlansCompareFeedModel.dart
...lueModel/page/PlansCompareFeed/PlansCompareFeedModel.dart
+29
-0
PlansCompareFeedPage.dart
...ClueModel/page/PlansCompareFeed/PlansCompareFeedPage.dart
+88
-0
ProjectDetailsItemView.dart
...ClueModel/page/ProjectDetails/ProjectDetailsItemView.dart
+71
-0
ProjectDetailsModel.dart
lib/ClueModel/page/ProjectDetails/ProjectDetailsModel.dart
+39
-0
ProjectDetailsPage.dart
lib/ClueModel/page/ProjectDetails/ProjectDetailsPage.dart
+67
-0
ClueApi.dart
lib/ClueModel/server/api/ClueApi.dart
+9
-0
ClueApi.serv.dart
lib/ClueModel/server/api/ClueApi.serv.dart
+40
-0
PlansCompareFeed.dart
lib/ClueModel/server/entity/PlansCompareFeed.dart
+114
-0
ProjectDetailsItem.dart
lib/ClueModel/server/entity/ProjectDetailsItem.dart
+115
-0
main.dart
lib/main.dart
+15
-14
pubspec.lock
pubspec.lock
+3
-3
No files found.
lib/ClueModel/ClueRouter.dart
View file @
095cf284
...
...
@@ -3,15 +3,18 @@
* @date 2020/6/24
**/
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/widgets.dart'
;
import
'package:flutter_common/Annotations/RouterBaser.dart'
;
import
'package:flutter_common/Annotations/anno/Router.dart'
;
import
'package:flutter_common/Annotations/anno/RouterCenter.dart'
;
import
'package:gm_flutter/ClueModel/ClueRouterImpl.dart'
;
@Router
(
"ClueRouter"
,
ClueRouterImpl
,
true
)
abstract
class
ClueRouter
implements
RouterBaser
{
@Router
(
"ClueRouter"
,
ClueRouterImpl
,
true
)
abstract
class
ClueRouter
implements
RouterBaser
{
Widget
getProjectDetailsPage
();
Widget
getPlansCompareFeed
();
Widget
getLevelOnePage
();
Widget
getPlanPage
();
}
\ No newline at end of file
}
lib/ClueModel/ClueRouterImpl.dart
View file @
095cf284
...
...
@@ -4,15 +4,27 @@
**/
import
'package:flutter/src/widgets/framework.dart'
;
import
'package:gm_flutter/ClueModel/ClueRouter.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/levelOne/LevelOnePage.dart'
;
import
'package:gm_flutter/ClueModel/page/plan/PlanPage.dart'
;
class
ClueRouterImpl
implements
ClueRouter
{
@override
Widget
getProjectDetailsPage
()
{
return
ProjectDetailsPage
();
}
@override
Widget
getLevelOnePage
()
{
return
LevelOnePage
();
}
@override
Widget
getPlansCompareFeed
()
{
return
PlansCompareFeedPage
();
}
@override
Widget
getPlanPage
()
{
return
PlanPage
();
...
...
lib/ClueModel/page/PlansCompareFeed/PlansCompareFeedItemView.dart
0 → 100644
View file @
095cf284
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/material.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart'
;
class
PlansCompareFeedItemView
extends
StatelessWidget
{
Plans
plan
;
int
groupValue
=
1
;
PlansCompareFeedItemView
(
this
.
plan
);
@override
Widget
build
(
BuildContext
context
)
{
return
Container
(
child:
getItem
());
}
getItem
()
{
if
(
plan
.
planType
==
1
)
{
return
getFirstLevelItem
();
}
else
{
return
getSecondLevelItem
();
}
}
getFirstLevelItem
()
{
Container
(
margin:
EdgeInsets
.
all
(
4.0
),
child:
Row
(
children:
<
Widget
>[
Radio
(
value:
1
,
groupValue:
groupValue
,
onChanged:
(
value
)
{
groupValue
=
value
;
}),
ClipRRect
(
borderRadius:
BorderRadius
.
circular
(
2.0
),
child:
Image
.
network
(
plan
.
projectImage
,
width:
50
,
height:
50
,
fit:
BoxFit
.
fill
,
),
),
Expanded
(
child:
Container
(
margin:
EdgeInsets
.
only
(
left:
8.0
),
height:
50
,
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
<
Widget
>[
Row
(
children:
<
Widget
>[
Text
(
plan
.
name
,
style:
TextStyle
(
fontWeight:
FontWeight
.
bold
,
fontSize:
14
,
color:
Color
(
0xFF282828
)),
maxLines:
1
,
),
Text
(
"好评率 "
,
style:
TextStyle
(
fontSize:
11
,
color:
Color
(
0xFF282828
)),
maxLines:
1
,
),
Text
(
plan
.
positiveRate
,
style:
TextStyle
(
fontWeight:
FontWeight
.
bold
,
fontSize:
14
,
color:
Color
(
0xFFFF5963
)),
maxLines:
1
,
),
],
),
Row
(
children:
<
Widget
>[
Text
(
'¥
${plan.minPrice}
-
${plan.maxPrice}
)'
,
style:
TextStyle
(
fontSize:
13
,
color:
Color
(
0xFFFF5963
)),
),
Text
(
"销量
${plan.salesCount}
"
,
style:
TextStyle
(
fontSize:
11
,
color:
Color
(
0xFF282828
)),
maxLines:
1
,
)
],
)
],
),
))
],
),
);
}
getSecondLevelItem
()
{
Container
(
margin:
EdgeInsets
.
all
(
4.0
),
child:
Row
(
children:
<
Widget
>[
Radio
(
value:
1
,
groupValue:
groupValue
,
onChanged:
(
value
)
{
groupValue
=
value
;
}),
Expanded
(
child:
Container
(
margin:
EdgeInsets
.
only
(
left:
8.0
),
height:
50
,
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
<
Widget
>[
Text
(
plan
.
name
,
style:
TextStyle
(
fontWeight:
FontWeight
.
bold
,
fontSize:
14
,
color:
Color
(
0xFF282828
)),
maxLines:
1
,
),
Row
(
children:
<
Widget
>[
Text
(
'¥
${plan.minPrice}
-
${plan.maxPrice}
)'
,
style:
TextStyle
(
fontSize:
13
,
color:
Color
(
0xFFFF5963
)),
),
Text
(
"指导价:¥
${plan.guidePrice}
"
,
style:
TextStyle
(
fontSize:
11
,
color:
Color
(
0xFF282828
)),
maxLines:
1
,
)
],
)
],
),
))
],
),
);
}
}
lib/ClueModel/page/PlansCompareFeed/PlansCompareFeedModel.dart
0 → 100644
View file @
095cf284
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/PlansCompareFeed.dart'
;
import
'package:gm_flutter/commonModel/net/DioUtil.dart'
;
import
'package:gm_flutter/commonModel/rx/RxDispose.dart'
;
class
PlansCompareFeedModel
extends
BaseModel
{
LiveData
<
PlansCompareFeed
>
liveData
=
LiveData
();
RxDispose
rxDispose
=
RxDispose
();
void
init
()
{
ClueApiImpl
.
getInstance
()
.
getPlansCompareFeed
(
DioUtil
.
getInstance
().
getDio
(),
123
,
1
)
.
listen
((
event
)
{
if
(
event
.
error
==
0
)
{
liveData
.
notifyView
(
event
);
}
})
.
addToDispose
(
rxDispose
)
.
onError
((
err
)
{});
}
@override
void
dispose
()
{
liveData
.
dispost
();
rxDispose
.
dispose
();
}
}
lib/ClueModel/page/PlansCompareFeed/PlansCompareFeedPage.dart
0 → 100644
View file @
095cf284
/*
* @author zcc
* @date 2020-07-01
* 方案对比
**/
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/material.dart'
;
import
'package:gm_flutter/ClueModel/page/PlansCompareFeed/PlansCompareFeedModel.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart'
;
import
'package:gm_flutter/commonModel/base/BaseComponent.dart'
;
import
'package:gm_flutter/commonModel/base/BaseState.dart'
;
import
'PlansCompareFeedItemView.dart'
;
class
PlansCompareFeedPage
extends
StatefulWidget
{
@override
State
<
StatefulWidget
>
createState
()
=>
PlansCompareFeedState
();
}
class
PlansCompareFeedState
extends
BaseState
<
PlansCompareFeedPage
>
{
PlansCompareFeedModel
_model
=
new
PlansCompareFeedModel
();
@override
void
initState
()
{
super
.
initState
();
_model
.
init
();
}
@override
void
dispose
()
{
_model
.
dispose
();
super
.
dispose
();
}
@override
Widget
buildItem
(
BuildContext
context
)
{}
@override
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
appBar:
AppBar
(
title:
Text
(
"方案对比"
),
),
body:
Center
(
child:
getBody
(),
),
);
}
getList
(
List
<
Plans
>
plans
)
{
return
Stack
(
alignment:
Alignment
.
bottomCenter
,
//指定未定位或部分定位widget的对齐方式
children:
<
Widget
>[
ListView
.
builder
(
itemCount:
plans
.
length
,
itemBuilder:
(
BuildContext
context
,
int
position
)
{
return
PlansCompareFeedItemView
(
plans
[
position
]);
}),
GestureDetector
(
behavior:
HitTestBehavior
.
opaque
,
onTap:
()
{},
child:
Container
(
margin:
EdgeInsets
.
only
(
left:
15
,
right:
15
,
top:
7.5
,
bottom:
7.5
),
width:
double
.
maxFinite
,
height:
40
,
decoration:
BoxDecoration
(
color:
Color
(
0xff51CDC7
),
borderRadius:
BorderRadius
.
circular
(
20
)),
alignment:
Alignment
.
center
,
child:
baseText
(
"对比"
,
14
,
Colors
.
white
,
bold:
true
),
))
]);
}
getBody
()
{
return
StreamBuilder
(
stream:
_model
.
liveData
.
stream
,
initialData:
PlansCompareFeed
(),
builder:
(
c
,
data
)
{
PlansCompareFeed
item
=
data
.
data
;
if
(
item
==
null
||
item
.
data
==
null
||
item
.
data
.
plans
==
null
)
{
return
loadingItem
();
}
return
getList
(
item
.
data
.
plans
);
},
);
}
}
lib/ClueModel/page/ProjectDetails/ProjectDetailsItemView.dart
0 → 100644
View file @
095cf284
/*
* @author zcc
* @date 2020-07-01
* 项目说明
**/
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/material.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/ProjectDetailsItem.dart'
;
class
ProjectDetailsItemView
extends
StatelessWidget
{
Groups
listData
;
ProjectDetailsItemView
(
this
.
listData
);
@override
Widget
build
(
BuildContext
context
)
{
List
<
Widget
>
tiles
=
[];
for
(
var
item
in
listData
.
attrs
)
{
tiles
.
add
(
getItem
(
item
));
}
var
row
=
Row
(
children:
<
Widget
>[
Container
(
padding:
EdgeInsets
.
only
(
top:
8.0
,
bottom:
8.0
,
left:
20
),
child:
Text
(
listData
.
name
,
style:
TextStyle
(
color:
Color
(
0xFF000000
),
fontSize:
15.0
,
),
),
),
Column
(
children:
tiles
,
)
],
);
return
Container
(
margin:
EdgeInsets
.
only
(
bottom:
5
,
left:
20
),
child:
row
,
);
}
getItem
(
Attrs
attrs
)
{
var
row
=
Container
(
margin:
EdgeInsets
.
only
(
bottom:
25
),
child:
Row
(
children:
<
Widget
>[
Text
(
attrs
.
attrName
,
style:
TextStyle
(
color:
Color
(
0xFF999999
),
fontSize:
13.0
,
),
),
Text
(
attrs
.
attrValue
,
style:
TextStyle
(
color:
Color
(
0xFF282828
),
fontSize:
14.0
,
),
maxLines:
1
,
),
],
),
);
return
Container
(
child:
row
,
);
}
}
lib/ClueModel/page/ProjectDetails/ProjectDetailsModel.dart
0 → 100644
View file @
095cf284
/*
* @author zcc
* @date 2020-07-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/commonModel/GMBase.dart'
;
import
'package:gm_flutter/commonModel/rx/RxDispose.dart'
;
import
'package:gm_flutter/commonModel/util/PrintUtil.dart'
;
import
'../../server/entity/ProjectDetailsItem.dart'
;
class
ProjectDetailsModel
extends
BaseModel
{
LiveData
<
ProjectDetailsItem
>
liveData
=
LiveData
();
RxDispose
rxDispose
=
RxDispose
();
void
init
()
{
ClueApiImpl
.
getInstance
()
.
getProjectDetails
(
DioUtil
.
getInstance
().
getDio
(),
123
)
.
listen
((
event
)
{
print
(
event
);
if
(
event
.
error
==
0
)
{
liveData
.
notifyView
(
event
);
}
})
.
addToDispose
(
rxDispose
)
.
onError
((
err
)
{
PrintUtil
.
printBug
(
err
);
});
}
@override
void
dispose
()
{
liveData
.
dispost
();
rxDispose
.
dispose
();
}
}
lib/ClueModel/page/ProjectDetails/ProjectDetailsPage.dart
0 → 100644
View file @
095cf284
/*
* @author zcc
* @date 2020-07-01
* 项目说明
**/
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/material.dart'
;
import
'package:gm_flutter/ClueModel/page/ProjectDetails/ProjectDetailsItemView.dart'
;
import
'package:gm_flutter/ClueModel/page/ProjectDetails/ProjectDetailsModel.dart'
;
import
'package:gm_flutter/commonModel/base/BaseComponent.dart'
;
import
'package:gm_flutter/commonModel/base/BaseState.dart'
;
import
'../../server/entity/ProjectDetailsItem.dart'
;
class
ProjectDetailsPage
extends
StatefulWidget
{
@override
State
<
StatefulWidget
>
createState
()
=>
ProjectDetailsState
();
}
class
ProjectDetailsState
extends
BaseState
<
ProjectDetailsPage
>
{
ProjectDetailsModel
_model
=
new
ProjectDetailsModel
();
@override
void
initState
()
{
super
.
initState
();
_model
.
init
();
}
@override
void
dispose
()
{
_model
.
dispose
();
super
.
dispose
();
}
@override
Widget
buildItem
(
BuildContext
context
)
{}
@override
Widget
build
(
BuildContext
context
)
{
return
Scaffold
(
appBar:
AppBar
(
title:
Text
(
"项目说明"
),
),
body:
Center
(
child:
getBody
(),
),
);
}
getBody
()
{
return
StreamBuilder
(
stream:
_model
.
liveData
.
stream
,
initialData:
ProjectDetailsItem
(),
builder:
(
c
,
data
)
{
ProjectDetailsItem
item
=
data
.
data
;
if
(
item
==
null
||
item
.
data
==
null
||
item
.
data
.
groups
==
null
)
{
return
loadingItem
();
}
return
ListView
.
builder
(
itemCount:
item
.
data
.
groups
.
length
,
itemBuilder:
(
BuildContext
context
,
int
position
)
{
return
ProjectDetailsItemView
(
item
.
data
.
groups
[
position
]);
});
},
);
}
}
lib/ClueModel/server/api/ClueApi.dart
View file @
095cf284
...
...
@@ -6,11 +6,20 @@ 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/PlansCompareFeed.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/ProjectDetailsItem.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanBean.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart'
;
@ServiceCenter
()
abstract
class
ClueApi
{
@Get
(
"/api/janus/plans/plan_detail"
)
ProjectDetailsItem
getProjectDetails
(
@Query
(
"plan_id"
)
int
plan_id
);
@Get
(
"/api/janus/plans/compare_feed"
)
PlansCompareFeed
getPlansCompareFeed
(
@Query
(
"plan_id"
)
int
plan_id
,
@Query
(
"plan_type"
)
int
plan_type
);
@Get
(
"api/janus/plans/plan_feed"
)
LevelOneFeedList
getLevelOneList
(
@Query
(
"plan_id"
)
int
plan_id
,
@Query
(
"tab_type"
)
String
tab_type
,
@Query
(
"page"
)
int
page
);
...
...
lib/ClueModel/server/api/ClueApi.serv.dart
View file @
095cf284
...
...
@@ -14,6 +14,8 @@ import 'package:dio/dio.dart';
import
'package:flutter/foundation.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/ProjectDetailsItem.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanBean.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart'
;
...
...
@@ -34,6 +36,36 @@ class ClueApiImpl {
return
_instance
;
}
Stream
<
ProjectDetailsItem
>
getProjectDetails
(
Dio
_dio
,
int
plan_id
)
{
return
Stream
.
fromFuture
(
get
(
_dio
,
'/api/janus/plans/plan_detail'
,
data:
{
'plan_id'
:
plan_id
,
})).
flatMap
((
value
)
{
if
(
value
!=
null
&&
(
value
.
statusCode
>=
200
&&
value
.
statusCode
<
300
))
{
return
Stream
.
fromFuture
(
compute
(
parseProjectDetailsItem
,
value
.
toString
()));
}
else
{
throw
Exception
(
"--未知网络错误--"
);
}
});
}
Stream
<
PlansCompareFeed
>
getPlansCompareFeed
(
Dio
_dio
,
int
plan_id
,
int
plan_type
)
{
return
Stream
.
fromFuture
(
get
(
_dio
,
'/api/janus/plans/compare_feed'
,
data:
{
'plan_id'
:
plan_id
,
'plan_type'
:
plan_type
,
})).
flatMap
((
value
)
{
if
(
value
!=
null
&&
(
value
.
statusCode
>=
200
&&
value
.
statusCode
<
300
))
{
return
Stream
.
fromFuture
(
compute
(
parsePlansCompareFeed
,
value
.
toString
()));
}
else
{
throw
Exception
(
"--未知网络错误--"
);
}
});
}
Stream
<
LevelOneFeedList
>
getLevelOneList
(
Dio
_dio
,
int
plan_id
,
String
tab_type
,
int
page
)
{
return
Stream
.
fromFuture
(
get
(
_dio
,
'api/janus/plans/plan_feed'
,
data:
{
...
...
@@ -229,6 +261,14 @@ class ClueApiImpl {
}
}
ProjectDetailsItem
parseProjectDetailsItem
(
String
value
)
{
return
ProjectDetailsItem
.
fromJson
(
json
.
decode
(
value
));
}
PlansCompareFeed
parsePlansCompareFeed
(
String
value
)
{
return
PlansCompareFeed
.
fromJson
(
json
.
decode
(
value
));
}
LevelOneFeedList
parseLevelOneFeedList
(
String
value
)
{
return
LevelOneFeedList
.
fromJson
(
json
.
decode
(
value
));
}
...
...
lib/ClueModel/server/entity/PlansCompareFeed.dart
0 → 100644
View file @
095cf284
class
PlansCompareFeed
{
int
error
;
String
message
;
String
extra
;
String
errorExtra
;
String
userType
;
Data
data
;
PlansCompareFeed
(
{
this
.
error
,
this
.
message
,
this
.
extra
,
this
.
errorExtra
,
this
.
userType
,
this
.
data
});
PlansCompareFeed
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
error
=
json
[
'error'
];
message
=
json
[
'message'
];
extra
=
json
[
'extra'
];
errorExtra
=
json
[
'error_extra'
];
userType
=
json
[
'user_type'
];
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
;
data
[
'extra'
]
=
this
.
extra
;
data
[
'error_extra'
]
=
this
.
errorExtra
;
data
[
'user_type'
]
=
this
.
userType
;
if
(
this
.
data
!=
null
)
{
data
[
'data'
]
=
this
.
data
.
toJson
();
}
return
data
;
}
}
class
Data
{
List
<
Plans
>
plans
;
Data
({
this
.
plans
});
Data
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
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
>();
if
(
this
.
plans
!=
null
)
{
data
[
'plans'
]
=
this
.
plans
.
map
((
v
)
=>
v
.
toJson
()).
toList
();
}
return
data
;
}
}
class
Plans
{
int
planId
;
int
planType
;
String
cardType
;
String
name
;
String
positiveRate
;
String
salesCount
;
String
minPrice
;
String
maxPrice
;
String
projectImage
;
String
guidePrice
;
Plans
(
{
this
.
planId
,
this
.
planType
,
this
.
cardType
,
this
.
name
,
this
.
positiveRate
,
this
.
salesCount
,
this
.
minPrice
,
this
.
maxPrice
,
this
.
projectImage
,
this
.
guidePrice
});
Plans
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
planId
=
json
[
'plan_id'
];
planType
=
json
[
'plan_type'
];
cardType
=
json
[
'card_type'
];
name
=
json
[
'name'
];
positiveRate
=
json
[
'positive_rate'
];
salesCount
=
json
[
'sales_count'
];
minPrice
=
json
[
'min_price'
];
maxPrice
=
json
[
'max_price'
];
projectImage
=
json
[
'project_image'
];
guidePrice
=
json
[
'guide_price'
];
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
data
[
'plan_id'
]
=
this
.
planId
;
data
[
'plan_type'
]
=
this
.
planType
;
data
[
'card_type'
]
=
this
.
cardType
;
data
[
'name'
]
=
this
.
name
;
data
[
'positive_rate'
]
=
this
.
positiveRate
;
data
[
'sales_count'
]
=
this
.
salesCount
;
data
[
'min_price'
]
=
this
.
minPrice
;
data
[
'max_price'
]
=
this
.
maxPrice
;
data
[
'project_image'
]
=
this
.
projectImage
;
data
[
'guide_price'
]
=
this
.
guidePrice
;
return
data
;
}
}
lib/ClueModel/server/entity/ProjectDetailsItem.dart
0 → 100644
View file @
095cf284
class
ProjectDetailsItem
{
int
error
;
String
message
;
String
extra
;
String
errorExtra
;
String
userType
;
Data
data
;
ProjectDetailsItem
(
{
this
.
error
,
this
.
message
,
this
.
extra
,
this
.
errorExtra
,
this
.
userType
,
this
.
data
});
ProjectDetailsItem
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
error
=
json
[
'error'
];
message
=
json
[
'message'
];
extra
=
json
[
'extra'
];
errorExtra
=
json
[
'error_extra'
];
userType
=
json
[
'user_type'
];
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
;
data
[
'extra'
]
=
this
.
extra
;
data
[
'error_extra'
]
=
this
.
errorExtra
;
data
[
'user_type'
]
=
this
.
userType
;
if
(
this
.
data
!=
null
)
{
data
[
'data'
]
=
this
.
data
.
toJson
();
}
return
data
;
}
}
class
Data
{
int
id
;
String
name
;
List
<
Groups
>
groups
;
Data
({
this
.
id
,
this
.
name
,
this
.
groups
});
Data
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
id
=
json
[
'id'
];
name
=
json
[
'name'
];
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
>();
data
[
'id'
]
=
this
.
id
;
data
[
'name'
]
=
this
.
name
;
if
(
this
.
groups
!=
null
)
{
data
[
'groups'
]
=
this
.
groups
.
map
((
v
)
=>
v
.
toJson
()).
toList
();
}
return
data
;
}
}
class
Groups
{
String
name
;
List
<
Attrs
>
attrs
;
Groups
({
this
.
name
,
this
.
attrs
});
Groups
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
name
=
json
[
'name'
];
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
[
'name'
]
=
this
.
name
;
if
(
this
.
attrs
!=
null
)
{
data
[
'attrs'
]
=
this
.
attrs
.
map
((
v
)
=>
v
.
toJson
()).
toList
();
}
return
data
;
}
}
class
Attrs
{
int
attrId
;
String
attrName
;
String
attrValue
;
Attrs
({
this
.
attrId
,
this
.
attrName
,
this
.
attrValue
});
Attrs
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
attrId
=
json
[
'attr_id'
];
attrName
=
json
[
'attr_name'
];
attrValue
=
json
[
'attr_value'
];
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
data
[
'attr_id'
]
=
this
.
attrId
;
data
[
'attr_name'
]
=
this
.
attrName
;
data
[
'attr_value'
]
=
this
.
attrValue
;
return
data
;
}
}
lib/main.dart
View file @
095cf284
...
...
@@ -4,7 +4,6 @@ import 'package:flutter/material.dart';
import
'package:flutter_boost/flutter_boost.dart'
;
import
'package:flutter_common/Annotations/anno/RouterCenter.dart'
;
import
'package:flutter_common/commonModel/util/WindowUtil.dart'
;
import
'package:gm_flutter/commonModel/base/BaseComponent.dart'
;
import
'package:gm_flutter/main.mark.dart'
;
import
'package:shared_preferences/shared_preferences.dart'
;
...
...
@@ -13,6 +12,7 @@ import 'DemoPage1.dart';
import
'commonModel/base/BaseUtil.dart'
;
import
'commonModel/cache/CacheManager.dart'
;
import
'commonModel/nav/NavigationService.dart'
;
import
'main.mark.dart'
;
NavigationService
navigationService
;
...
...
@@ -74,19 +74,20 @@ class MyApp extends State<MyAppWidget> {
Widget
build
(
BuildContext
context
)
{
WindowUtil
.
setBarStatus
(
true
);
return
MaterialApp
(
theme:
ThemeData
(
primaryColor:
Colors
.
white
,
cursorColor:
Color
(
0xff20BDBB
),
canvasColor:
Colors
.
white
),
builder:
FlutterBoost
.
init
(
postPush:
_onRoutePushed
),
home:
isDebug
?
RouterCenterImpl
().
findMainRouter
().
getTestPage
()
:
Container
(
color:
Colors
.
white
,
child:
Center
(
child:
loadingItem
(),
),
));
theme:
ThemeData
(),
builder:
FlutterBoost
.
init
(
postPush:
_onRoutePushed
),
home:
RouterCenterImpl
().
findClueRouter
().
getProjectDetailsPage
(),
// home: isDebug
// ? Container(
// color: Colors.red,
// )
// : Container(
// color: Colors.white,
// child: Center(
// child: loadingItem(),
// ),
// )
);
}
void
_onRoutePushed
(
...
...
pubspec.lock
View file @
095cf284
...
...
@@ -210,7 +210,7 @@ packages:
name: file
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.2.
0
"
version: "5.2.
1
"
fixnum:
dependency: transitive
description:
...
...
@@ -474,7 +474,7 @@ packages:
name: permission_handler
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.0.1"
version: "5.0.1
+1
"
permission_handler_platform_interface:
dependency: transitive
description:
...
...
@@ -544,7 +544,7 @@ packages:
name: pull_to_refresh
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.
5.8
"
version: "1.
6.0
"
quiver:
dependency: transitive
description:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment