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
5fdd70c6
Commit
5fdd70c6
authored
Jul 06, 2020
by
林生雨
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commit
parent
ec0284ff
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
361 additions
and
175 deletions
+361
-175
LevelOneItem.dart
lib/ClueModel/page/levelOne/LevelOneItem.dart
+66
-20
LevelOneList.dart
lib/ClueModel/page/levelOne/LevelOneList.dart
+35
-10
LevelOneModel.dart
lib/ClueModel/page/levelOne/LevelOneModel.dart
+2
-20
LevelOnePage.dart
lib/ClueModel/page/levelOne/LevelOnePage.dart
+48
-75
TopList.dart
lib/ClueModel/page/top/TopList.dart
+25
-6
TopModel.dart
lib/ClueModel/page/top/TopModel.dart
+4
-2
TopPage.dart
lib/ClueModel/page/top/TopPage.dart
+59
-20
MainManager.dart
lib/MainRouter/manager/MainManager.dart
+4
-2
BaseComponent.dart
lib/commonModel/base/BaseComponent.dart
+2
-1
BaseUtil.dart
lib/commonModel/base/BaseUtil.dart
+2
-1
SimpleEventBus.dart
lib/commonModel/eventbus/SimpleEventBus.dart
+43
-0
baseRefreshIndicator.dart
lib/commonModel/view/baseRefreshIndicator.dart
+4
-4
main.dart
lib/main.dart
+36
-14
pubspec.lock
pubspec.lock
+7
-0
pubspec.yaml
pubspec.yaml
+2
-0
updateAar.sh
updateAar.sh
+22
-0
No files found.
lib/ClueModel/page/levelOne/LevelOneItem.dart
View file @
5fdd70c6
...
@@ -30,6 +30,25 @@ class LevelOneItem extends StatelessWidget {
...
@@ -30,6 +30,25 @@ class LevelOneItem extends StatelessWidget {
}
}
}
}
static
double
getCardTypeHeight
(
Cards
cards
)
{
if
(
cards
.
cardType
==
"plan"
)
{
return
118
;
}
else
if
(
cards
.
cardType
==
"hospital"
)
{
return
149
;
}
else
if
(
cards
.
cardType
==
"doctor"
)
{
return
127
;
}
else
if
(
cards
.
cardType
==
"diary"
)
{
double
image
=
(
cards
.
diary
.
images
==
null
||
cards
.
diary
.
images
.
isEmpty
||
cards
.
diary
.
images
.
length
<
2
)
?
0
:
175
;
double
text
=
22
*
(
cards
.
diary
.
content
.
length
/
22
)
+
24.5
;
return
40
+
image
+
text
+
55
;
}
return
0
;
}
Widget
DoctorItem
(
BuildContext
context
)
{
Widget
DoctorItem
(
BuildContext
context
)
{
if
(
cards
.
doctor
==
null
&&
isDebug
)
{
if
(
cards
.
doctor
==
null
&&
isDebug
)
{
throw
new
Exception
();
throw
new
Exception
();
...
@@ -89,7 +108,7 @@ class LevelOneItem extends StatelessWidget {
...
@@ -89,7 +108,7 @@ class LevelOneItem extends StatelessWidget {
),
),
Positioned
(
Positioned
(
bottom:
15
,
bottom:
15
,
right:
1
8
7
,
right:
1
3
7
,
child:
askWidget
(),
child:
askWidget
(),
),
),
Positioned
(
Positioned
(
...
@@ -97,6 +116,15 @@ class LevelOneItem extends StatelessWidget {
...
@@ -97,6 +116,15 @@ class LevelOneItem extends StatelessWidget {
bottom:
25
,
bottom:
25
,
child:
compareWidget
(),
child:
compareWidget
(),
),
),
Positioned
(
left:
0
,
bottom:
0
,
child:
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
-
30
,
height:
0.5
,
color:
Color
(
0xffE5E5E5
),
),
)
],
],
),
),
),
),
...
@@ -155,7 +183,7 @@ class LevelOneItem extends StatelessWidget {
...
@@ -155,7 +183,7 @@ class LevelOneItem extends StatelessWidget {
),
),
Positioned
(
Positioned
(
bottom:
15
,
bottom:
15
,
right:
1
8
7
,
right:
1
3
7
,
child:
askWidget
(),
child:
askWidget
(),
),
),
Positioned
(
Positioned
(
...
@@ -172,6 +200,15 @@ class LevelOneItem extends StatelessWidget {
...
@@ -172,6 +200,15 @@ class LevelOneItem extends StatelessWidget {
left:
57
,
left:
57
,
top:
43.5
,
top:
43.5
,
child:
FiveStarView
(
int
.
parse
(
cards
.
hospital
.
star
),
5
),
child:
FiveStarView
(
int
.
parse
(
cards
.
hospital
.
star
),
5
),
),
Positioned
(
left:
0
,
bottom:
0
,
child:
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
-
30
,
height:
0.5
,
color:
Color
(
0xffE5E5E5
),
),
)
)
],
],
),
),
...
@@ -212,7 +249,7 @@ class LevelOneItem extends StatelessWidget {
...
@@ -212,7 +249,7 @@ class LevelOneItem extends StatelessWidget {
),
),
Positioned
(
bottom:
15
,
right:
0
,
child:
lowPriceWidget
()),
Positioned
(
bottom:
15
,
right:
0
,
child:
lowPriceWidget
()),
Positioned
(
Positioned
(
right:
1
52
,
right:
1
37
,
bottom:
15
,
bottom:
15
,
child:
askWidget
(),
child:
askWidget
(),
),
),
...
@@ -225,7 +262,7 @@ class LevelOneItem extends StatelessWidget {
...
@@ -225,7 +262,7 @@ class LevelOneItem extends StatelessWidget {
Color
(
0xff666666
)),
Color
(
0xff666666
)),
),
),
Positioned
(
Positioned
(
left:
15
,
left:
0
,
bottom:
0
,
bottom:
0
,
child:
Container
(
child:
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
-
30
,
width:
MediaQuery
.
of
(
context
).
size
.
width
-
30
,
...
@@ -289,7 +326,7 @@ class LevelOneItem extends StatelessWidget {
...
@@ -289,7 +326,7 @@ class LevelOneItem extends StatelessWidget {
}
}
Widget
DiaryItem
(
BuildContext
context
)
{
Widget
DiaryItem
(
BuildContext
context
)
{
if
(
cards
.
plan
==
null
&&
isDebug
)
{
if
(
cards
.
diary
==
null
&&
isDebug
)
{
throw
new
Exception
();
throw
new
Exception
();
}
}
return
Container
(
return
Container
(
...
@@ -297,8 +334,10 @@ class LevelOneItem extends StatelessWidget {
...
@@ -297,8 +334,10 @@ class LevelOneItem extends StatelessWidget {
width:
double
.
maxFinite
,
width:
double
.
maxFinite
,
child:
Column
(
child:
Column
(
mainAxisSize:
MainAxisSize
.
min
,
mainAxisSize:
MainAxisSize
.
min
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
<
Widget
>[
children:
<
Widget
>[
Container
(
Container
(
margin:
EdgeInsets
.
only
(
top:
15
),
height:
25
,
height:
25
,
child:
Row
(
child:
Row
(
mainAxisSize:
MainAxisSize
.
min
,
mainAxisSize:
MainAxisSize
.
min
,
...
@@ -319,7 +358,8 @@ class LevelOneItem extends StatelessWidget {
...
@@ -319,7 +358,8 @@ class LevelOneItem extends StatelessWidget {
child:
baseText
(
child:
baseText
(
cards
.
diary
.
user
.
userName
,
13
,
Color
(
0xff999999
)),
cards
.
diary
.
user
.
userName
,
13
,
Color
(
0xff999999
)),
),
),
cards
.
diary
.
userLevel
!=
null
&&
cards
.
diary
.
userLevel
.
levelIcon
!=
null
cards
.
diary
.
userLevel
!=
null
&&
cards
.
diary
.
userLevel
.
levelIcon
!=
null
?
Container
(
?
Container
(
width:
31
,
width:
31
,
height:
12
,
height:
12
,
...
@@ -339,7 +379,10 @@ class LevelOneItem extends StatelessWidget {
...
@@ -339,7 +379,10 @@ class LevelOneItem extends StatelessWidget {
?
Container
(
?
Container
(
height:
0
,
height:
0
,
)
)
:
Row
(
:
Container
(
margin:
EdgeInsets
.
only
(
top:
12
),
height:
163
,
child:
Row
(
children:
<
Widget
>[
children:
<
Widget
>[
Expanded
(
Expanded
(
child:
Container
(
child:
Container
(
...
@@ -392,13 +435,14 @@ class LevelOneItem extends StatelessWidget {
...
@@ -392,13 +435,14 @@ class LevelOneItem extends StatelessWidget {
),
),
)
)
],
],
),
)
),
Container
(
Container
(
margin:
EdgeInsets
.
only
(
top:
12.5
,
bottom:
12
),
margin:
EdgeInsets
.
only
(
top:
12.5
,
bottom:
12
),
child:
Text
(
child:
Text
(
cards
.
diary
.
content
,
cards
.
diary
.
content
,
textScaleFactor:
1.0
,
textScaleFactor:
1.0
,
maxLines:
5
,
maxLines:
5
,
strutStyle:
StrutStyle
(
forceStrutHeight:
true
,
height:
2
),
overflow:
TextOverflow
.
ellipsis
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
style:
TextStyle
(
decoration:
TextDecoration
.
none
,
decoration:
TextDecoration
.
none
,
...
@@ -406,12 +450,11 @@ class LevelOneItem extends StatelessWidget {
...
@@ -406,12 +450,11 @@ class LevelOneItem extends StatelessWidget {
color:
Color
(
0xff464646
),
color:
Color
(
0xff464646
),
fontStyle:
FontStyle
.
normal
,
fontStyle:
FontStyle
.
normal
,
fontWeight:
FontWeight
.
w400
),
fontWeight:
FontWeight
.
w400
),
)
,
),
)
),
,
baseText
(
"项目
${cards.diary.title}
"
,
13
,
Color
(
0xff999999
)),
baseText
(
"项目
${cards.diary.title}
"
,
13
,
Color
(
0xff999999
)),
Container
(
Container
(
margin:
EdgeInsets
.
only
(
top:
12
,
bottom:
16
),
margin:
EdgeInsets
.
only
(
top:
12
,
bottom:
16
),
height:
14
,
height:
14
,
child:
Row
(
child:
Row
(
mainAxisSize:
MainAxisSize
.
min
,
mainAxisSize:
MainAxisSize
.
min
,
...
@@ -423,8 +466,9 @@ class LevelOneItem extends StatelessWidget {
...
@@ -423,8 +466,9 @@ class LevelOneItem extends StatelessWidget {
child:
Image
.
asset
(
"assets/eye.png"
),
child:
Image
.
asset
(
"assets/eye.png"
),
),
),
Container
(
Container
(
margin:
EdgeInsets
.
only
(
left:
5
,
right:
20
),
margin:
EdgeInsets
.
only
(
left:
5
,
right:
20
),
child:
baseText
(
"
${cards.diary.viewNum}
"
,
12
,
Color
(
0xff999999
)),
child:
baseText
(
"
${cards.diary.viewNum}
"
,
12
,
Color
(
0xff999999
)),
),
),
Container
(
Container
(
width:
14
,
width:
14
,
...
@@ -432,8 +476,9 @@ class LevelOneItem extends StatelessWidget {
...
@@ -432,8 +476,9 @@ class LevelOneItem extends StatelessWidget {
child:
Image
.
asset
(
"assets/arguement.png"
),
child:
Image
.
asset
(
"assets/arguement.png"
),
),
),
Container
(
Container
(
margin:
EdgeInsets
.
only
(
left:
5
,
right:
20
),
margin:
EdgeInsets
.
only
(
left:
5
,
right:
20
),
child:
baseText
(
"
${cards.diary.replyNum}
"
,
12
,
Color
(
0xff999999
)),
child:
baseText
(
"
${cards.diary.replyNum}
"
,
12
,
Color
(
0xff999999
)),
),
),
Container
(
Container
(
width:
14
,
width:
14
,
...
@@ -441,8 +486,9 @@ class LevelOneItem extends StatelessWidget {
...
@@ -441,8 +486,9 @@ class LevelOneItem extends StatelessWidget {
child:
Image
.
asset
(
"assets/heart.png"
),
child:
Image
.
asset
(
"assets/heart.png"
),
),
),
Container
(
Container
(
margin:
EdgeInsets
.
only
(
left:
5
,
right:
20
),
margin:
EdgeInsets
.
only
(
left:
5
,
right:
20
),
child:
baseText
(
"
${cards.diary.voteNum}
"
,
12
,
Color
(
0xff999999
)),
child:
baseText
(
"
${cards.diary.voteNum}
"
,
12
,
Color
(
0xff999999
)),
)
)
],
],
),
),
...
...
lib/ClueModel/page/levelOne/LevelOneList.dart
View file @
5fdd70c6
...
@@ -7,6 +7,8 @@ import 'package:flutter/material.dart';
...
@@ -7,6 +7,8 @@ import 'package:flutter/material.dart';
import
'package:gm_flutter/ClueModel/page/levelOne/LevelOneListModel.dart'
;
import
'package:gm_flutter/ClueModel/page/levelOne/LevelOneListModel.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart'
;
import
'package:gm_flutter/commonModel/base/BaseComponent.dart'
;
import
'package:gm_flutter/commonModel/base/BaseComponent.dart'
;
import
'package:gm_flutter/commonModel/bean/Pair.dart'
;
import
'package:gm_flutter/commonModel/eventbus/SimpleEventBus.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
import
'LevelOneItem.dart'
;
import
'LevelOneItem.dart'
;
...
@@ -16,37 +18,47 @@ class LevelOneList extends StatefulWidget {
...
@@ -16,37 +18,47 @@ class LevelOneList extends StatefulWidget {
int
planId
;
int
planId
;
String
tabName
;
String
tabName
;
LevelOneList
(
this
.
planId
,
this
.
tabName
,
this
.
topHeight
);
LevelOneList
(
this
.
planId
,
this
.
tabName
,
this
.
topHeight
);
@override
@override
State
<
StatefulWidget
>
createState
()
=>
LevelOneListState
();
State
<
StatefulWidget
>
createState
()
=>
LevelOneListState
();
}
}
class
LevelOneListState
extends
State
<
LevelOneList
>
{
class
LevelOneListState
extends
State
<
LevelOneList
>
with
AutomaticKeepAliveClientMixin
{
LevelOneListModel
_model
=
LevelOneListModel
();
LevelOneListModel
_model
=
LevelOneListModel
();
RefreshController
refreshController
=
RefreshController
();
RefreshController
refreshController
=
RefreshController
();
Function
(
String
str
)
refresh
;
@override
@override
void
initState
()
{
void
initState
()
{
super
.
initState
();
super
.
initState
();
_model
.
plan_id
=
widget
.
planId
;
_model
.
plan_id
=
widget
.
planId
;
_model
.
tab_type
=
widget
.
tabName
;
_model
.
tab_type
=
widget
.
tabName
;
_model
.
refreshView
(
true
);
refresh
=
(
str
)
{
_model
.
stateLive
.
notifyView
(
LOADING
);
_model
.
refreshView
(
true
);
_model
.
refreshView
(
true
);
};
SimpleEventBus
.
instance
().
resignEvent
(
"LevelOneList"
,
refresh
);
}
}
@override
@override
void
dispose
()
{
void
dispose
()
{
refreshController
.
dispose
();
refreshController
.
dispose
();
_model
.
dispose
();
_model
.
dispose
();
SimpleEventBus
.
instance
().
unResignEvent
(
"LevelOneList"
,
refresh
);
super
.
dispose
();
super
.
dispose
();
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
super
.
build
(
context
);
return
baseStateView
(
MediaQuery
.
of
(
context
).
size
.
width
,
return
baseStateView
(
MediaQuery
.
of
(
context
).
size
.
width
,
MediaQuery
.
of
(
context
).
size
.
height
,
_model
.
stateLive
,
pages
(),
()
{
MediaQuery
.
of
(
context
).
size
.
height
,
_model
.
stateLive
,
pages
(),
()
{
_model
.
refreshView
(
true
);
_model
.
refreshView
(
true
);
},
paddingTop:
widget
.
topHeight
);
},
paddingTop:
widget
.
topHeight
);
}
}
Widget
pages
()
{
Widget
pages
()
{
...
@@ -56,9 +68,9 @@ class LevelOneListState extends State<LevelOneList> {
...
@@ -56,9 +68,9 @@ class LevelOneListState extends State<LevelOneList> {
physics:
ClampingScrollPhysics
(),
physics:
ClampingScrollPhysics
(),
// shrinkWrap: true,
// shrinkWrap: true,
slivers:
<
Widget
>[
slivers:
<
Widget
>[
SliverOverlapInjector
(
//
SliverOverlapInjector(
handle:
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
context
),
//
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
),
//
),
StreamBuilder
<
List
<
Cards
>>(
StreamBuilder
<
List
<
Cards
>>(
stream:
_model
.
cardsLive
.
stream
,
stream:
_model
.
cardsLive
.
stream
,
initialData:
_model
.
cardsLive
.
data
??
[],
initialData:
_model
.
cardsLive
.
data
??
[],
...
@@ -71,9 +83,15 @@ class LevelOneListState extends State<LevelOneList> {
...
@@ -71,9 +83,15 @@ class LevelOneListState extends State<LevelOneList> {
return
SliverList
(
return
SliverList
(
delegate:
SliverChildBuilderDelegate
(
delegate:
SliverChildBuilderDelegate
(
(
BuildContext
context
,
int
index
)
{
(
BuildContext
context
,
int
index
)
{
if
(
index
==
_model
.
data
.
length
){
return
Container
(
height:
40
,
color:
Color
(
0xffF7F6FA
),
);
}
return
LevelOneItem
(
_model
.
data
[
index
]);
return
LevelOneItem
(
_model
.
data
[
index
]);
},
},
childCount:
_model
.
data
.
length
,
childCount:
_model
.
data
.
length
+
1
,
),
),
);
);
},
},
...
@@ -82,10 +100,14 @@ class LevelOneListState extends State<LevelOneList> {
...
@@ -82,10 +100,14 @@ class LevelOneListState extends State<LevelOneList> {
stream:
_model
.
cardsLive
.
stream
,
stream:
_model
.
cardsLive
.
stream
,
initialData:
_model
.
data
??
[],
initialData:
_model
.
data
??
[],
builder:
(
c
,
data
)
{
builder:
(
c
,
data
)
{
double
totalHeight
=
0
;
_model
.
data
.
forEach
((
element
)
{
totalHeight
+=
LevelOneItem
.
getCardTypeHeight
(
element
);
});
double
height
=
MediaQuery
.
of
(
context
).
size
.
height
-
double
height
=
MediaQuery
.
of
(
context
).
size
.
height
-
40
-
40
-
widget
.
topHeight
-
widget
.
topHeight
-
100
*
_model
.
data
.
length
;
totalHeight
;
return
SliverToBoxAdapter
(
return
SliverToBoxAdapter
(
child:
Container
(
child:
Container
(
height:
height
<
0
?
0
:
height
,
height:
height
<
0
?
0
:
height
,
...
@@ -98,4 +120,7 @@ class LevelOneListState extends State<LevelOneList> {
...
@@ -98,4 +120,7 @@ class LevelOneListState extends State<LevelOneList> {
_model
.
loadMore
();
_model
.
loadMore
();
},
pullDown:
false
,
pullUp:
true
);
},
pullDown:
false
,
pullUp:
true
);
}
}
@override
bool
get
wantKeepAlive
=>
true
;
}
}
lib/ClueModel/page/levelOne/LevelOneModel.dart
View file @
5fdd70c6
...
@@ -16,21 +16,12 @@ import 'package:gm_flutter/commonModel/util/PrintUtil.dart';
...
@@ -16,21 +16,12 @@ import 'package:gm_flutter/commonModel/util/PrintUtil.dart';
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
class
LevelOneModel
extends
BaseModel
{
class
LevelOneModel
extends
BaseModel
{
LiveData
<
double
>
appBarLive
=
LiveData
();
LiveData
<
bool
>
showTab
=
LiveData
();
LiveData
<
int
>
topIndexLive
=
new
LiveData
();
LiveData
<
double
>
topScrollLive
=
new
LiveData
();
LiveData
<
int
>
stateLive
=
LiveData
();
LiveData
<
int
>
stateLive
=
LiveData
();
LiveData
<
double
>
textLive
=
LiveData
();
LiveData
<
double
>
textLive
=
LiveData
();
RxDispose
rxDispose
=
RxDispose
();
RxDispose
rxDispose
=
RxDispose
();
LiveData
<
Pair
<
int
,
List
<
Cards
>>>
cardsLive
=
LiveData
();
Map
<
int
,
List
<
Cards
>>
data
=
new
Map
();
List
list
=
[
"plan"
,
"hospital"
,
"doctor"
,
"diary"
];
List
<
Tabs
>
tabsList
=
[];
List
<
Tabs
>
tabsList
=
[];
List
pageList
=
[
1
,
1
,
1
,
1
];
List
pageHeightList
=
[
118
,
149
,
118
,
118
];
int
plan_id
=
0
;
int
plan_id
=
0
;
PlanOverData
planoverItem
;
PlanOverData
planoverItem
;
...
@@ -39,7 +30,7 @@ class LevelOneModel extends BaseModel {
...
@@ -39,7 +30,7 @@ class LevelOneModel extends BaseModel {
.
getPlanOverView
(
DioUtil
.
getInstance
().
getDio
(),
plan_id
)
.
getPlanOverView
(
DioUtil
.
getInstance
().
getDio
(),
plan_id
)
.
listen
((
event
)
{
.
listen
((
event
)
{
if
(
event
.
error
==
0
)
{
if
(
event
.
error
==
0
)
{
planoverItem
=
event
.
data
;
planoverItem
=
event
.
data
;
tabsList
=
event
.
data
.
tabs
;
tabsList
=
event
.
data
.
tabs
;
stateLive
.
notifyView
(
ENDLOADING
);
stateLive
.
notifyView
(
ENDLOADING
);
callback
();
callback
();
...
@@ -55,22 +46,13 @@ class LevelOneModel extends BaseModel {
...
@@ -55,22 +46,13 @@ class LevelOneModel extends BaseModel {
});
});
}
}
int
currentIndex
=
0
;
int
currentIndex
=
0
;
@override
@override
void
dispose
()
{
void
dispose
()
{
showTab
.
dispost
();
cardsLive
.
dispost
();
appBarLive
.
dispost
();
topIndexLive
.
dispost
();
topScrollLive
.
dispost
();
stateLive
.
dispost
();
stateLive
.
dispost
();
textLive
.
dispost
();
textLive
.
dispost
();
}
}
void
selectTab
(
int
index
)
{
void
selectTab
(
int
index
)
{}
}
}
}
lib/ClueModel/page/levelOne/LevelOnePage.dart
View file @
5fdd70c6
...
@@ -6,97 +6,78 @@ import 'dart:async';
...
@@ -6,97 +6,78 @@ import 'dart:async';
import
'dart:math'
;
import
'dart:math'
;
import
'dart:ui'
;
import
'dart:ui'
;
import
'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'
as
extend
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/gestures.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_boost/flutter_boost.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_common/commonModel/live/LiveData.dart'
;
import
'package:gm_flutter/ClueModel/page/levelOne/LevelOneItem.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/ClueModel/page/levelTwo/LevelTwoPage.dart'
;
import
'package:gm_flutter/ClueModel/page/levelTwo/LevelTwoPage.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.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/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/base/BaseUtil.dart'
;
import
'package:gm_flutter/commonModel/eventbus/SimpleEventBus.dart'
;
import
'package:gm_flutter/commonModel/util/DartUtil.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:pull_to_refresh/pull_to_refresh.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
import
'LevelOneBar.dart'
;
class
LevelOnePage
extends
StatefulWidget
{
class
LevelOnePage
extends
StatefulWidget
{
@override
@override
State
<
StatefulWidget
>
createState
()
=>
LevelOneState
();
State
<
StatefulWidget
>
createState
()
=>
LevelOneState
();
}
}
class
LevelOneState
extends
BaseState
<
LevelOnePage
>
{
class
LevelOneState
extends
BaseState
<
LevelOnePage
>
with
TickerProviderStateMixin
{
int
planId
=
10
;
int
planId
=
10
;
LevelOneModel
_model
=
new
LevelOneModel
();
LevelOneModel
_model
=
new
LevelOneModel
();
RefreshController
_refreshController
=
RefreshController
();
RefreshController
_refreshController
=
RefreshController
();
PageController
pageController
=
new
PageController
();
GlobalKey
keyTop
=
new
GlobalKey
();
GlobalKey
keyTop
=
new
GlobalKey
();
GlobalKey
key1
=
new
GlobalKey
();
GlobalKey
key1
=
new
GlobalKey
();
double
screenWidth
;
double
screenWidth
;
List
<
Widget
>
oneList
=
new
List
();
List
<
Widget
>
oneList
=
new
List
();
int
lastPageIndex
=
0
;
int
lastPageIndex
=
0
;
TabController
tabController
;
int
index
=
0
;
static
const
MethodChannel
_methodChannel
=
MethodChannel
(
'gm_method_channel'
);
@override
@override
void
initState
()
{
void
initState
()
{
super
.
initState
();
super
.
initState
();
_methodChannel
.
invokeMethod
(
"WHAT "
,
"www"
);
_model
.
init
(()
{
_model
.
init
(()
{
setState
(()
{}
);
_initTabBar
(
);
});
});
// pageController.addListener(() {
// if (screenWidth != null) {
// _model.topScrollLive.notifyView(
// pageController.offset / screenWidth * (screenWidth / 4));
// }
// });
}
}
void
_onScroll
(
double
offset
)
{
void
_initTabBar
()
{
if
(
offset
<
10
)
{
if
(
tabController
!=
null
)
{
_model
.
appBarLive
.
notifyView
(
0.0
);
tabController
.
removeListener
(
tabControlerListener
);
}
else
if
(
offset
<
500
)
{
var
topPos
=
PosUtil
.
findPos
(
keyTop
);
if
(
topPos
!=
null
&&
topPos
.
dy
<
0
)
{
double
dy
=
-
topPos
.
dy
;
if
(
dy
<
20
)
{
dy
=
0
;
}
double
alpha
=
dy
/
112
;
if
(
alpha
<
0
)
{
alpha
=
0
;
}
else
if
(
alpha
>
1
)
{
alpha
=
1
;
}
_model
.
appBarLive
.
notifyView
(
alpha
);
}
}
if
(
offset
>
100
)
{
var
key1Pos
=
PosUtil
.
findPos
(
key1
);
if
(
key1Pos
!=
null
)
{
if
(
key1Pos
.
dy
<
86
)
{
_model
.
showTab
.
notifyView
(
true
);
}
else
{
_model
.
showTab
.
notifyView
(
false
);
}
}
}
}
tabController
=
TabController
(
initialIndex:
index
,
length:
_model
.
tabsList
.
length
,
vsync:
this
);
tabController
.
addListener
(
tabControlerListener
);
setState
(()
{});
}
}
@override
@override
void
dispose
()
{
void
dispose
()
{
tabController
?.
removeListener
(
tabControlerListener
);
tabController
?.
dispose
();
_model
.
dispose
();
_model
.
dispose
();
pageController
.
dispose
();
_refreshController
.
dispose
();
_refreshController
.
dispose
();
super
.
dispose
();
super
.
dispose
();
}
}
void
tabControlerListener
()
{
if
(
index
!=
tabController
.
index
)
{
index
=
tabController
.
index
;
}
}
@override
@override
Widget
buildItem
(
BuildContext
context
)
{
Widget
buildItem
(
BuildContext
context
)
{
oneList
.
clear
();
oneList
.
clear
();
...
@@ -117,11 +98,13 @@ class LevelOneState extends BaseState<LevelOnePage> {
...
@@ -117,11 +98,13 @@ class LevelOneState extends BaseState<LevelOnePage> {
MediaQuery
.
of
(
context
).
size
.
height
,
MediaQuery
.
of
(
context
).
size
.
height
,
_model
.
stateLive
,
_model
.
stateLive
,
Container
(
Container
(
child:
NestedScrollViewRefreshIndicator
(
child:
Base
NestedScrollViewRefreshIndicator
(
onRefresh:
()
async
{
onRefresh:
()
async
{
Completer
completer
=
new
Completer
();
Completer
completer
=
new
Completer
();
_model
.
init
(()
{
_model
.
init
(()
{
setState
(()
{});
_initTabBar
();
SimpleEventBus
.
instance
()
.
notifyListener
(
"LevelOneList"
,
""
);
completer
.
complete
();
completer
.
complete
();
});
});
return
completer
.
future
;
return
completer
.
future
;
...
@@ -129,7 +112,7 @@ class LevelOneState extends BaseState<LevelOnePage> {
...
@@ -129,7 +112,7 @@ class LevelOneState extends BaseState<LevelOnePage> {
child:
newHomeWarp
()),
child:
newHomeWarp
()),
),
()
{
),
()
{
_model
.
init
(()
{
_model
.
init
(()
{
setState
(()
{}
);
_initTabBar
(
);
});
});
})));
})));
}
}
...
@@ -180,27 +163,27 @@ class LevelOneState extends BaseState<LevelOnePage> {
...
@@ -180,27 +163,27 @@ class LevelOneState extends BaseState<LevelOnePage> {
List
<
Widget
>
list
=
[];
List
<
Widget
>
list
=
[];
var
d
=
MediaQueryData
.
fromWindow
(
window
).
padding
.
top
;
var
d
=
MediaQueryData
.
fromWindow
(
window
).
padding
.
top
;
for
(
int
i
=
0
;
i
<
_model
.
tabsList
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
_model
.
tabsList
.
length
;
i
++)
{
list
.
add
(
list
.
add
(
extend
.
NestedScrollViewInnerScrollPositionKeyWidget
(
Key
(
"Tab
${i}
"
),
LevelOneList
(
planId
,
_model
.
tabsList
[
i
].
tabType
,
kToolbarHeight
+
d
)
LevelOneList
(
planId
,
_model
.
tabsList
[
i
].
tabType
,
kToolbarHeight
+
d
)
)
.
toActive
()
);
);
}
}
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
;
return
DefaultTabController
(
return
extend
.
NestedScrollView
(
length:
_model
.
tabsList
.
length
,
innerScrollPositionKeyBuilder:
()
{
child:
NestedScrollView
(
String
index
=
'Tab
${tabController.index.toString()}
'
;
headerSliverBuilder:
return
Key
(
index
);
(
BuildContext
context
,
bool
innerBoxIsScrolled
)
{
},
headerSliverBuilder:
(
BuildContext
context
,
bool
innerBoxIsScrolled
)
{
return
<
Widget
>[
return
<
Widget
>[
SliverOverlapAbsorber
(
SliverOverlapAbsorber
(
handle:
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
handle:
extend
.
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
context
),
context
),
sliver:
baseSliverAppBar
(
sliver:
baseSliverAppBar
(
// _model.imageUrl
// _model.imageUrl
"https://pic.igengmei.com/2018/09/11/1513/b7e825a4e4c1-w"
)),
"https://pic.igengmei.com/2018/09/11/1513/b7e825a4e4c1-w"
)),
SliverList
(
SliverList
(
delegate:
delegate:
SliverChildBuilderDelegate
((
BuildContext
c
,
int
i
)
{
SliverChildBuilderDelegate
((
BuildContext
c
,
int
i
)
{
if
(
i
==
0
)
{
if
(
i
==
0
)
{
return
Container
(
return
Container
(
height:
pinnedHeaderHeight
,
height:
pinnedHeaderHeight
,
...
@@ -214,14 +197,14 @@ class LevelOneState extends BaseState<LevelOnePage> {
...
@@ -214,14 +197,14 @@ class LevelOneState extends BaseState<LevelOnePage> {
child:
Container
(
child:
Container
(
height:
40
,
height:
40
,
color:
Colors
.
white
,
color:
Colors
.
white
,
child:
baseTabBar
(
null
,
getTabs
(),
(
index
)
{
child:
baseTabBar
(
tabController
,
getTabs
(),
(
index
)
{
_model
.
selectTab
(
index
);
_model
.
selectTab
(
index
);
},
scroll:
false
),
},
scroll:
false
),
)),
)),
),
),
];
];
},
},
body:
TabBarView
(
children:
list
)
));
body:
TabBarView
(
controller:
tabController
,
children:
list
));
}
}
List
<
Widget
>
getTabs
()
{
List
<
Widget
>
getTabs
()
{
...
@@ -405,16 +388,6 @@ class LevelOneState extends BaseState<LevelOnePage> {
...
@@ -405,16 +388,6 @@ class LevelOneState extends BaseState<LevelOnePage> {
);
);
}
}
Widget
feed
()
{
return
Container
(
key:
key1
,
child:
MessageBarView
(
topIndexLive:
_model
.
topIndexLive
,
topScrollLive:
_model
.
topScrollLive
,
pageController:
pageController
,
));
}
// Widget home() {
// Widget home() {
// return Column(
// return Column(
// children: <Widget>[
// children: <Widget>[
...
...
lib/ClueModel/page/top/TopList.dart
View file @
5fdd70c6
...
@@ -6,8 +6,11 @@ import 'package:flutter/material.dart';
...
@@ -6,8 +6,11 @@ import 'package:flutter/material.dart';
import
'package:gm_flutter/ClueModel/page/plan/PlanItem.dart'
;
import
'package:gm_flutter/ClueModel/page/plan/PlanItem.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart'
;
import
'package:gm_flutter/commonModel/base/BaseComponent.dart'
;
import
'package:gm_flutter/commonModel/base/BaseComponent.dart'
;
import
'package:gm_flutter/commonModel/bean/Pair.dart'
;
import
'package:gm_flutter/commonModel/eventbus/SimpleEventBus.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
import
'TopListModel.dart'
;
import
'TopListModel.dart'
;
class
TopList
extends
StatefulWidget
{
class
TopList
extends
StatefulWidget
{
...
@@ -20,14 +23,21 @@ class TopList extends StatefulWidget {
...
@@ -20,14 +23,21 @@ class TopList extends StatefulWidget {
State
<
StatefulWidget
>
createState
()
=>
TopListState
();
State
<
StatefulWidget
>
createState
()
=>
TopListState
();
}
}
class
TopListState
extends
State
<
TopList
>
{
class
TopListState
extends
State
<
TopList
>
with
AutomaticKeepAliveClientMixin
{
RefreshController
refreshController
=
RefreshController
();
RefreshController
refreshController
=
RefreshController
();
TopListModel
_model
=
TopListModel
();
TopListModel
_model
=
TopListModel
();
Function
(
String
str
)
refresh
;
@override
@override
void
initState
()
{
void
initState
()
{
super
.
initState
();
super
.
initState
();
_model
.
getData
(
true
);
_model
.
getData
(
true
);
refresh
=
(
str
)
{
_model
.
stateLive
.
notifyView
(
LOADING
);
_model
.
getData
(
true
);
};
SimpleEventBus
.
instance
().
resignEvent
(
"TopList"
,
refresh
);
print
(
"
${this}
INIT"
);
print
(
"
${this}
INIT"
);
}
}
...
@@ -35,12 +45,14 @@ class TopListState extends State<TopList> {
...
@@ -35,12 +45,14 @@ class TopListState extends State<TopList> {
void
dispose
()
{
void
dispose
()
{
refreshController
.
dispose
();
refreshController
.
dispose
();
_model
.
dispose
();
_model
.
dispose
();
SimpleEventBus
.
instance
().
unResignEvent
(
"TopList"
,
refresh
);
print
(
"
${this}
QUIT"
);
print
(
"
${this}
QUIT"
);
super
.
dispose
();
super
.
dispose
();
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
super
.
build
(
context
);
return
baseStateView
(
MediaQuery
.
of
(
context
).
size
.
width
,
return
baseStateView
(
MediaQuery
.
of
(
context
).
size
.
width
,
MediaQuery
.
of
(
context
).
size
.
height
,
_model
.
stateLive
,
home
(),
()
{
MediaQuery
.
of
(
context
).
size
.
height
,
_model
.
stateLive
,
home
(),
()
{
_model
.
getData
(
true
);
_model
.
getData
(
true
);
...
@@ -54,14 +66,18 @@ class TopListState extends State<TopList> {
...
@@ -54,14 +66,18 @@ class TopListState extends State<TopList> {
physics:
ClampingScrollPhysics
(),
physics:
ClampingScrollPhysics
(),
// shrinkWrap: true,
// shrinkWrap: true,
slivers:
<
Widget
>[
slivers:
<
Widget
>[
SliverOverlapInjector
(
SliverToBoxAdapter
(
handle:
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
context
),
child:
Container
(
height:
widget
.
topHeight
,
),
),
),
// extend.SliverOverlapInjector(
// handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
// ),
StreamBuilder
<
List
<
Plans
>>(
StreamBuilder
<
List
<
Plans
>>(
stream:
_model
.
datasLive
.
stream
,
stream:
_model
.
datasLive
.
stream
,
initialData:
_model
.
datas
??
[],
initialData:
_model
.
datas
??
[],
builder:
(
c
,
data
)
{
builder:
(
c
,
data
)
{
print
(
"LLDATA
${data.data}
"
);
if
(
data
.
data
.
isEmpty
&&
_model
.
page
>
1
)
{
if
(
data
.
data
.
isEmpty
&&
_model
.
page
>
1
)
{
refreshController
.
loadNoData
();
refreshController
.
loadNoData
();
}
else
{
}
else
{
...
@@ -84,8 +100,8 @@ class TopListState extends State<TopList> {
...
@@ -84,8 +100,8 @@ class TopListState extends State<TopList> {
builder:
(
c
,
data
)
{
builder:
(
c
,
data
)
{
double
height
=
MediaQuery
.
of
(
context
).
size
.
height
-
double
height
=
MediaQuery
.
of
(
context
).
size
.
height
-
40
-
40
-
widget
.
topHeight
-
100
*
_model
.
datas
.
length
100
*
_model
.
datas
.
length
;
;
return
SliverToBoxAdapter
(
return
SliverToBoxAdapter
(
child:
Container
(
child:
Container
(
height:
height
<
0
?
0
:
height
,
height:
height
<
0
?
0
:
height
,
...
@@ -98,4 +114,7 @@ class TopListState extends State<TopList> {
...
@@ -98,4 +114,7 @@ class TopListState extends State<TopList> {
_model
.
loadMore
();
_model
.
loadMore
();
},
pullDown:
false
,
pullUp:
true
);
},
pullDown:
false
,
pullUp:
true
);
}
}
@override
bool
get
wantKeepAlive
=>
true
;
}
}
lib/ClueModel/page/top/TopModel.dart
View file @
5fdd70c6
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
* @author lsy
* @author lsy
* @date 2020/7/2
* @date 2020/7/2
**/
**/
import
'package:dio/dio.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter_common/commonModel/live/BaseModel.dart'
;
import
'package:flutter_common/commonModel/live/BaseModel.dart'
;
import
'package:flutter_common/commonModel/live/LiveData.dart'
;
import
'package:flutter_common/commonModel/live/LiveData.dart'
;
import
'package:flutter_common/commonModel/toast/NativeToast.dart'
;
import
'package:flutter_common/commonModel/toast/NativeToast.dart'
;
...
@@ -40,7 +42,7 @@ class TopModel extends BaseModel {
...
@@ -40,7 +42,7 @@ class TopModel extends BaseModel {
tabIndex
=
index
;
tabIndex
=
index
;
}
}
void
init
(
Function
(
int
size
)
back
)
{
void
init
(
VoidCallback
back
)
{
ClueApiImpl
.
getInstance
()
ClueApiImpl
.
getInstance
()
.
getPlanBar
(
DioUtil
.
getInstance
().
getDio
(),
rank_type
)
.
getPlanBar
(
DioUtil
.
getInstance
().
getDio
(),
rank_type
)
.
listen
((
event
)
{
.
listen
((
event
)
{
...
@@ -48,7 +50,7 @@ class TopModel extends BaseModel {
...
@@ -48,7 +50,7 @@ class TopModel extends BaseModel {
stateLive
.
notifyView
(
ENDLOADING
);
stateLive
.
notifyView
(
ENDLOADING
);
imageUrl
=
event
.
data
.
bannerImage
;
imageUrl
=
event
.
data
.
bannerImage
;
tabs
=
event
.
data
.
tabs
;
tabs
=
event
.
data
.
tabs
;
back
(
tabs
.
length
);
back
();
}
else
{
}
else
{
NativeToast
.
showNativeToast
(
event
.
message
);
NativeToast
.
showNativeToast
(
event
.
message
);
stateLive
.
notifyView
(
FAIL
);
stateLive
.
notifyView
(
FAIL
);
...
...
lib/ClueModel/page/top/TopPage.dart
View file @
5fdd70c6
...
@@ -3,16 +3,21 @@
...
@@ -3,16 +3,21 @@
* @date 2020/7/2
* @date 2020/7/2
**/
**/
import
'dart:async'
;
import
'dart:ui'
;
import
'dart:ui'
;
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'
as
extend
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.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/top/TopModel.dart'
;
import
'package:gm_flutter/ClueModel/page/top/TopModel.dart'
;
import
'package:gm_flutter/ClueModel/util/PosUtil.dart'
;
import
'package:gm_flutter/ClueModel/util/PosUtil.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/eventbus/SimpleEventBus.dart'
;
import
'package:gm_flutter/commonModel/util/DartUtil.dart'
;
import
'package:gm_flutter/commonModel/util/DartUtil.dart'
;
import
'package:gm_flutter/commonModel/view/baseRefreshIndicator.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
import
'TopList.dart'
;
import
'TopList.dart'
;
...
@@ -25,7 +30,8 @@ class TopPage extends StatefulWidget {
...
@@ -25,7 +30,8 @@ class TopPage extends StatefulWidget {
class
TopPageState
extends
BaseState
<
TopPage
>
with
TickerProviderStateMixin
{
class
TopPageState
extends
BaseState
<
TopPage
>
with
TickerProviderStateMixin
{
RefreshController
refreshController
=
RefreshController
();
RefreshController
refreshController
=
RefreshController
();
TopModel
_model
=
TopModel
();
TopModel
_model
=
TopModel
();
GlobalKey
globalKey
=
GlobalKey
();
int
index
=
0
;
TabController
tabController
;
@override
@override
void
initState
()
{
void
initState
()
{
...
@@ -34,18 +40,30 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
...
@@ -34,18 +40,30 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
}
}
void
init
()
{
void
init
()
{
_model
.
init
((
i
)
{
_model
.
init
(()
{
setState
(()
{}
);
_initTabBar
(
);
});
});
}
}
@override
@override
void
dispose
()
{
void
dispose
()
{
_model
.
dispose
();
_model
.
dispose
();
tabController
?.
removeListener
(
tabControlerListener
);
tabController
?.
dispose
();
refreshController
.
dispose
();
refreshController
.
dispose
();
super
.
dispose
();
super
.
dispose
();
}
}
void
_initTabBar
()
{
if
(
tabController
!=
null
)
{
tabController
.
removeListener
(
tabControlerListener
);
}
tabController
=
TabController
(
initialIndex:
index
,
length:
_model
.
tabs
.
length
,
vsync:
this
);
tabController
.
addListener
(
tabControlerListener
);
setState
(()
{});
}
@override
@override
Widget
buildItem
(
BuildContext
context
)
{
Widget
buildItem
(
BuildContext
context
)
{
return
Scaffold
(
return
Scaffold
(
...
@@ -53,7 +71,26 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
...
@@ -53,7 +71,26 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
MediaQuery
.
of
(
context
).
size
.
width
,
MediaQuery
.
of
(
context
).
size
.
width
,
MediaQuery
.
of
(
context
).
size
.
height
,
MediaQuery
.
of
(
context
).
size
.
height
,
_model
.
stateLive
,
_model
.
stateLive
,
Stack
(
Container
(
child:
BaseNestedScrollViewRefreshIndicator
(
onRefresh:
()
async
{
Completer
completer
=
new
Completer
();
_model
.
init
(()
{
_initTabBar
();
SimpleEventBus
.
instance
().
notifyListener
(
"TopList"
,
""
);
completer
.
complete
();
});
return
completer
.
future
;
},
child:
homeWarp
()),
),
()
{
init
();
}),
);
}
Widget
homeWarp
()
{
return
Stack
(
children:
<
Widget
>[
children:
<
Widget
>[
Container
(
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
,
width:
MediaQuery
.
of
(
context
).
size
.
width
,
...
@@ -66,15 +103,12 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
...
@@ -66,15 +103,12 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
}
}
if
(
scrollNotification
is
ScrollUpdateNotification
&&
if
(
scrollNotification
is
ScrollUpdateNotification
&&
scrollNotification
.
metrics
.
axisDirection
.
index
==
2
)
{}
scrollNotification
.
metrics
.
axisDirection
.
index
==
2
)
{}
print
(
"NOT
${scrollNotification}
${scrollNotification is KeepAliveNotification}
"
);
if
(
scrollNotification
.
depth
==
0
)
{
if
(
scrollNotification
.
depth
==
0
)
{
if
(
scrollNotification
.
metrics
.
pixels
>
80
)
{
if
(
scrollNotification
.
metrics
.
pixels
>
80
)
{
_model
.
textLive
.
notifyView
(
_model
.
textLive
.
notifyView
(
(
scrollNotification
.
metrics
.
pixels
-
80
)
/
40
>
1.0
(
scrollNotification
.
metrics
.
pixels
-
80
)
/
40
>
1.0
?
1.0
?
1.0
:
(
scrollNotification
.
metrics
.
pixels
-
80
)
/
:
(
scrollNotification
.
metrics
.
pixels
-
80
)
/
40
);
40
);
}
else
{
}
else
{
_model
.
textLive
.
notifyView
(
0.0
);
_model
.
textLive
.
notifyView
(
0.0
);
}
}
...
@@ -95,9 +129,6 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
...
@@ -95,9 +129,6 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
baseSliverTitle
(
baseSliverTitle
(
"title"
,
MediaQuery
.
of
(
context
).
size
.
width
,
_model
.
textLive
)
"title"
,
MediaQuery
.
of
(
context
).
size
.
width
,
_model
.
textLive
)
],
],
),
()
{
init
();
}),
);
);
}
}
...
@@ -105,16 +136,18 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
...
@@ -105,16 +136,18 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
List
<
Widget
>
list
=
[];
List
<
Widget
>
list
=
[];
var
d
=
MediaQueryData
.
fromWindow
(
window
).
padding
.
top
;
var
d
=
MediaQueryData
.
fromWindow
(
window
).
padding
.
top
;
for
(
int
i
=
0
;
i
<
_model
.
tabs
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
_model
.
tabs
.
length
;
i
++)
{
list
.
add
(
TopList
(
_model
.
tabs
[
i
].
id
,
48
+
d
).
toActive
());
list
.
add
(
extend
.
NestedScrollViewInnerScrollPositionKeyWidget
(
Key
(
"Tab
${i}
"
),
TopList
(
_model
.
tabs
[
i
].
id
,
kToolbarHeight
+
d
)));
}
}
return
DefaultTabController
(
return
extend
.
NestedScrollView
(
length:
_model
.
tabs
.
length
,
innerScrollPositionKeyBuilder:
()
{
child:
NestedScrollView
(
String
index
=
'Tab
${tabController.index.toString()}
'
;
headerSliverBuilder:
return
Key
(
index
);
(
BuildContext
context
,
bool
innerBoxIsScrolled
)
{
},
headerSliverBuilder:
(
BuildContext
context
,
bool
innerBoxIsScrolled
)
{
return
<
Widget
>[
return
<
Widget
>[
SliverOverlapAbsorber
(
SliverOverlapAbsorber
(
handle:
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
handle:
extend
.
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
context
),
context
),
sliver:
baseSliverAppBar
(
_model
.
imageUrl
)),
sliver:
baseSliverAppBar
(
_model
.
imageUrl
)),
SliverPersistentHeader
(
SliverPersistentHeader
(
...
@@ -123,14 +156,14 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
...
@@ -123,14 +156,14 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
child:
Container
(
child:
Container
(
height:
40
,
height:
40
,
color:
Colors
.
white
,
color:
Colors
.
white
,
child:
baseTabBar
(
null
,
getTabs
(),
(
index
)
{
child:
baseTabBar
(
tabController
,
getTabs
(),
(
index
)
{
_model
.
selectTab
(
index
);
_model
.
selectTab
(
index
);
}),
}),
)),
)),
),
),
];
];
},
},
body:
TabBarView
(
children:
list
)
));
body:
TabBarView
(
controller:
tabController
,
children:
list
));
}
}
List
<
Widget
>
getTabs
()
{
List
<
Widget
>
getTabs
()
{
...
@@ -142,4 +175,10 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
...
@@ -142,4 +175,10 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
}
}
return
list
;
return
list
;
}
}
void
tabControlerListener
()
{
if
(
index
!=
tabController
.
index
)
{
index
=
tabController
.
index
;
}
}
}
}
lib/MainRouter/manager/MainManager.dart
View file @
5fdd70c6
...
@@ -4,9 +4,10 @@
...
@@ -4,9 +4,10 @@
**/
**/
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/base/BaseUtil.dart'
;
class
MainManager
{
class
MainManager
{
static
const
EventChannel
_channel
=
EventChannel
(
"flutter_plugin_event"
);
MainManager
.
_
()
{}
MainManager
.
_
()
{}
...
@@ -20,8 +21,9 @@ class MainManager {
...
@@ -20,8 +21,9 @@ class MainManager {
}
}
startInit
()
{
startInit
()
{
_channel
.
receiveBroadcastStream
().
listen
((
data
)
{
flutterEvent
.
receiveBroadcastStream
().
listen
((
data
)
{
print
(
"LSY FLUTTER EVENT
${data}
"
);
print
(
"LSY FLUTTER EVENT
${data}
"
);
});
});
flutterChannel
.
invokeMethod
(
"WHAT "
,
"www"
);
}
}
}
}
lib/commonModel/base/BaseComponent.dart
View file @
5fdd70c6
...
@@ -15,6 +15,7 @@ import 'package:gm_flutter/commonModel/GMBase.dart';
...
@@ -15,6 +15,7 @@ import 'package:gm_flutter/commonModel/GMBase.dart';
import
'package:gm_flutter/commonModel/bean/Pair.dart'
;
import
'package:gm_flutter/commonModel/bean/Pair.dart'
;
import
'package:gm_flutter/commonModel/util/DartUtil.dart'
;
import
'package:gm_flutter/commonModel/util/DartUtil.dart'
;
import
'package:gm_flutter/commonModel/view/ImagesAnimation.dart'
;
import
'package:gm_flutter/commonModel/view/ImagesAnimation.dart'
;
import
'package:gm_flutter/commonModel/view/baseRefreshIndicator.dart'
;
import
'package:gm_flutter/commonModel/view/baseTabIndicator.dart'
;
import
'package:gm_flutter/commonModel/view/baseTabIndicator.dart'
;
import
'package:lottie/lottie.dart'
;
import
'package:lottie/lottie.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
...
@@ -378,7 +379,7 @@ Widget normalRefreshHeader() {
...
@@ -378,7 +379,7 @@ Widget normalRefreshHeader() {
Widget
emptyItem
(
double
width
,
double
height
,
{
String
detail
,
double
paddingTop
})
{
Widget
emptyItem
(
double
width
,
double
height
,
{
String
detail
,
double
paddingTop
})
{
return
Container
(
return
Container
(
padding:
EdgeInsets
.
only
(
top:
paddingTop
),
padding:
EdgeInsets
.
only
(
top:
paddingTop
??
0
),
width:
width
,
width:
width
,
height:
height
,
height:
height
,
color:
Colors
.
white
,
color:
Colors
.
white
,
...
...
lib/commonModel/base/BaseUtil.dart
View file @
5fdd70c6
...
@@ -9,4 +9,5 @@ import 'package:flutter/material.dart';
...
@@ -9,4 +9,5 @@ import 'package:flutter/material.dart';
import
'package:flutter/services.dart'
;
import
'package:flutter/services.dart'
;
const
flutterChannel
=
const
MethodChannel
(
'gm_method_channel'
);
const
flutterChannel
=
const
MethodChannel
(
'gm_method_channel'
);
const
bool
isDebug
=
!
const
bool
.
fromEnvironment
(
"dart.vm.product"
);
const
flutterEvent
=
const
EventChannel
(
'flutter_plugin_event'
);
const
bool
isDebug
=
!
const
bool
.
fromEnvironment
(
"dart.vm.product"
);
lib/commonModel/eventbus/SimpleEventBus.dart
0 → 100644
View file @
5fdd70c6
/*
* @author lsy
* @date 2020/7/5
**/
import
'package:dio/dio.dart'
;
class
SimpleEventBus
{
static
SimpleEventBus
_eventBus
;
SimpleEventBus
.
_
();
static
SimpleEventBus
instance
(){
if
(
_eventBus
==
null
){
_eventBus
=
SimpleEventBus
.
_
();
}
return
_eventBus
;
}
Map
<
String
,
List
<
Function
(
String
str
)>>
map
=
Map
();
void
resignEvent
(
String
name
,
Function
(
String
str
)
func
){
if
(
map
[
name
]==
null
){
map
[
name
]=[];
}
map
[
name
].
add
(
func
);
}
void
unResignEvent
(
String
name
,
Function
(
String
str
)
func
){
if
(
map
[
name
]==
null
){
return
;
}
map
[
name
].
remove
(
func
);
}
void
notifyListener
(
String
name
,
String
str
){
if
(
map
[
name
]==
null
){
return
;
}
map
[
name
].
forEach
((
element
)
{
element
(
str
);
});
}
}
\ No newline at end of file
lib/commonModel/view/baseRefreshIndicator.dart
View file @
5fdd70c6
...
@@ -79,13 +79,13 @@ enum _RefreshIndicatorMode {
...
@@ -79,13 +79,13 @@ enum _RefreshIndicatorMode {
/// Must be used as a sliver inside a [CustomScrollView] instead of wrapping
/// Must be used as a sliver inside a [CustomScrollView] instead of wrapping
/// around a [ScrollView] because it's a part of the scrollable instead of
/// around a [ScrollView] because it's a part of the scrollable instead of
/// being overlaid on top of it.
/// being overlaid on top of it.
class
NestedScrollViewRefreshIndicator
extends
StatefulWidget
{
class
Base
NestedScrollViewRefreshIndicator
extends
StatefulWidget
{
/// Creates a refresh indicator.
/// Creates a refresh indicator.
///
///
/// The [onRefresh], [child], and [notificationPredicate] arguments must be
/// The [onRefresh], [child], and [notificationPredicate] arguments must be
/// non-null. The default
/// non-null. The default
/// [displacement] is 40.0 logical pixels.
/// [displacement] is 40.0 logical pixels.
const
NestedScrollViewRefreshIndicator
({
const
Base
NestedScrollViewRefreshIndicator
({
Key
key
,
Key
key
,
@required
this
.
child
,
@required
this
.
child
,
this
.
displacement
=
55.0
,
this
.
displacement
=
55.0
,
...
@@ -150,8 +150,8 @@ class NestedScrollViewRefreshIndicator extends StatefulWidget {
...
@@ -150,8 +150,8 @@ class NestedScrollViewRefreshIndicator extends StatefulWidget {
/// Contains the state for a [NestedScrollViewRefreshIndicator]. This class can be used to
/// Contains the state for a [NestedScrollViewRefreshIndicator]. This class can be used to
/// programmatically show the refresh indicator, see the [show] method.
/// programmatically show the refresh indicator, see the [show] method.
class
NestedScrollViewRefreshIndicatorState
class
NestedScrollViewRefreshIndicatorState
extends
State
<
NestedScrollViewRefreshIndicator
>
extends
State
<
Base
NestedScrollViewRefreshIndicator
>
with
TickerProviderStateMixin
<
NestedScrollViewRefreshIndicator
>
{
with
TickerProviderStateMixin
<
Base
NestedScrollViewRefreshIndicator
>
{
AnimationController
_positionController
;
AnimationController
_positionController
;
Animation
<
double
>
_positionFactor
;
Animation
<
double
>
_positionFactor
;
Animation
<
double
>
_value
;
Animation
<
double
>
_value
;
...
...
lib/main.dart
View file @
5fdd70c6
import
'dart:async'
;
import
'dart:async'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/services.dart'
;
import
'package:flutter_boost/flutter_boost.dart'
;
import
'package:flutter_boost/flutter_boost.dart'
;
import
'package:flutter_common/Annotations/anno/RouterCenter.dart'
;
import
'package:flutter_common/Annotations/anno/RouterCenter.dart'
;
import
'package:flutter_common/commonModel/util/WindowUtil.dart'
;
import
'package:flutter_common/commonModel/util/WindowUtil.dart'
;
import
'package:flutter_screenutil/screenutil.dart'
;
import
'package:gm_flutter/main.mark.dart'
;
import
'package:gm_flutter/main.mark.dart'
;
import
'package:shared_preferences/shared_preferences.dart'
;
import
'package:shared_preferences/shared_preferences.dart'
;
import
'package:gm_flutter/ClueModel/page/PlanCompareDetail/PlanCompareDetailPage.dart'
;
import
'package:gm_flutter/ClueModel/page/PlanCompareDetail/PlanCompareDetailPage.dart'
;
...
@@ -37,7 +39,7 @@ void main() {
...
@@ -37,7 +39,7 @@ void main() {
SharedPreferences
.
getInstance
().
then
((
value
)
{
SharedPreferences
.
getInstance
().
then
((
value
)
{
sharedPreferences
=
value
;
sharedPreferences
=
value
;
});
});
RouterCenterImpl
().
findMainRouter
().
init
();
//
RouterCenterImpl().findMainRouter().init();
},
(
Object
error
,
StackTrace
stack
)
{
},
(
Object
error
,
StackTrace
stack
)
{
//TODO
//TODO
print
(
"lsy EEEEEE
${error.toString()}
${stack.toString()}
"
);
print
(
"lsy EEEEEE
${error.toString()}
${stack.toString()}
"
);
...
@@ -58,7 +60,7 @@ class MyApp extends State<MyAppWidget> {
...
@@ -58,7 +60,7 @@ class MyApp extends State<MyAppWidget> {
super
.
initState
();
super
.
initState
();
FlutterBoost
.
singleton
.
registerPageBuilders
({
FlutterBoost
.
singleton
.
registerPageBuilders
({
'demoPage'
:
(
pageName
,
params
,
_
)
{
'demoPage'
:
(
pageName
,
params
,
_
)
{
return
Demo
Page
();
return
RouterCenterImpl
().
findClueRouter
().
getLevelOne
Page
();
},
},
'demoPage1'
:
(
pageName
,
params
,
_
)
{
'demoPage1'
:
(
pageName
,
params
,
_
)
{
return
DemoPage1
();
return
DemoPage1
();
...
@@ -67,30 +69,30 @@ class MyApp extends State<MyAppWidget> {
...
@@ -67,30 +69,30 @@ class MyApp extends State<MyAppWidget> {
FlutterBoost
.
singleton
FlutterBoost
.
singleton
.
addBoostContainerLifeCycleObserver
((
state
,
settings
)
{
.
addBoostContainerLifeCycleObserver
((
state
,
settings
)
{
print
(
"LSY
${state}
"
);
print
(
"LSY
${state}
"
);
if
(
state
==
ContainerLifeCycle
.
Init
)
{
const
EventChannel
flutterEvent
=
const
EventChannel
(
'flutter_plugin_event'
);
flutterEvent
.
receiveBroadcastStream
().
listen
((
data
)
{
print
(
"LSY FLUTTER EVENT
${data}
"
);
});
MethodChannel
flutterChannel
=
const
MethodChannel
(
'gm_method_channel'
);
flutterChannel
.
invokeMethod
(
"FFINIT"
,
"Fff"
);
}
});
});
// FlutterBoost.singleton.addBoostNavigatorObserver(TestBoostNavigatorObserver());
// FlutterBoost.singleton.addBoostNavigatorObserver(TestBoostNavigatorObserver());
}
}
@override
@override
Widget
build
(
BuildContext
context
)
{
Widget
build
(
BuildContext
context
)
{
WindowUtil
.
setBarStatus
(
tru
e
);
WindowUtil
.
setBarStatus
(
fals
e
);
return
MaterialApp
(
return
MaterialApp
(
theme:
ThemeData
(
theme:
ThemeData
(
primaryColor:
Colors
.
white
,
primaryColor:
Colors
.
white
,
cursorColor:
Color
(
0xff20BDBB
),
cursorColor:
Color
(
0xff20BDBB
),
highlightColor:
Colors
.
transparent
,
highlightColor:
Colors
.
transparent
,
splashColor:
Colors
.
transparent
,
splashColor:
Colors
.
transparent
,
canvasColor:
Colors
.
white
),
canvasColor:
Colors
.
white
),
builder:
FlutterBoost
.
init
(
postPush:
_onRoutePushed
),
builder:
FlutterBoost
.
init
(
postPush:
_onRoutePushed
),
home:
isDebug
home:
Home
());
?
RouterCenterImpl
().
findMainRouter
().
getTestPage
()
:
Container
(
color:
Colors
.
white
,
child:
Center
(
child:
loadingItem
(),
),
));
}
}
void
_onRoutePushed
(
void
_onRoutePushed
(
...
@@ -101,3 +103,23 @@ class MyApp extends State<MyAppWidget> {
...
@@ -101,3 +103,23 @@ class MyApp extends State<MyAppWidget> {
Future
<
dynamic
>
_
,
Future
<
dynamic
>
_
,
)
{}
)
{}
}
}
class
Home
extends
StatefulWidget
{
@override
State
<
StatefulWidget
>
createState
()
=>
HomeState
();
}
class
HomeState
extends
State
<
Home
>
{
@override
Widget
build
(
BuildContext
context
)
{
ScreenUtil
.
init
(
context
,
width:
375
,
height:
810
);
return
isDebug
?
RouterCenterImpl
().
findMainRouter
().
getTestPage
()
:
Container
(
color:
Colors
.
white
,
child:
Center
(
child:
loadingItem
(),
),
);
}
}
pubspec.lock
View file @
5fdd70c6
...
@@ -262,6 +262,13 @@ packages:
...
@@ -262,6 +262,13 @@ packages:
url: "https://github.com/asd451398533/flutter_common.git"
url: "https://github.com/asd451398533/flutter_common.git"
source: git
source: git
version: "0.0.1"
version: "0.0.1"
flutter_screenutil:
dependency: "direct main"
description:
name: flutter_screenutil
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
flutter_svg:
flutter_svg:
dependency: transitive
dependency: transitive
description:
description:
...
...
pubspec.yaml
View file @
5fdd70c6
...
@@ -34,6 +34,8 @@ dependencies:
...
@@ -34,6 +34,8 @@ dependencies:
lottie
:
^0.4.0+1
lottie
:
^0.4.0+1
app_settings
:
^4.0.1+1
app_settings
:
^4.0.1+1
extended_nested_scroll_view
:
^1.0.0
extended_nested_scroll_view
:
^1.0.0
#适配库
flutter_screenutil
:
^1.1.0
dev_dependencies
:
dev_dependencies
:
...
...
updateAar.sh
0 → 100755
View file @
5fdd70c6
#!/usr/bin/env bash
echo
START
projectDir
=
`
pwd
`
rootFlutter
=
`
which flutter
`
rootDir
=
${
rootFlutter
%/*
}
#====clean
cd
${
projectDir
}
${
rootFlutter
}
clean
export
PUB_HOSTED_URL
=
https://pub.flutter-io.cn
export
FLUTTER_STORAGE_BASE_URL
=
https://storage.flutter-io.cn
${
rootFlutter
}
packages get
rm
-rf
${
projectDir
}
/build
flutter build aar
--release
--target-platform
android-arm
#rm -rf /Users/apple/lsy/gengmei_android/gm-flutter/libs/flutterApp.aar
cp
-r
${
projectDir
}
/build/host/outputs/repo/com/example/gm_flutter/flutter_release/1.0/flutter_release-1.0.aar /Users/apple/lsy/gengmei_android/gm-flutter/libs/flutterApp.aar
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