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
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
370 additions
and
230 deletions
+370
-230
LevelOneItem.dart
lib/ClueModel/page/levelOne/LevelOneItem.dart
+0
-0
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
+73
-100
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
+109
-70
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
This diff is collapsed.
Click to expand it.
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
);
_model
.
refreshView
(
true
);
refresh
=
(
str
)
{
_model
.
stateLive
.
notifyView
(
LOADING
);
_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,48 +163,48 @@ class LevelOneState extends BaseState<LevelOnePage> {
...
@@ -180,48 +163,48 @@ 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
)
{
},
return
<
Widget
>[
headerSliverBuilder:
(
BuildContext
context
,
bool
innerBoxIsScrolled
)
{
SliverOverlapAbsorber
(
return
<
Widget
>[
handle:
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
SliverOverlapAbsorber
(
context
),
handle:
extend
.
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
sliver:
baseSliverAppBar
(
context
),
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
,
);
);
}
}
return
oneList
[
i
-
1
];
return
oneList
[
i
-
1
];
},
childCount:
oneList
.
length
+
1
)),
},
childCount:
oneList
.
length
+
1
)),
SliverPersistentHeader
(
SliverPersistentHeader
(
pinned:
true
,
pinned:
true
,
delegate:
StickyTabBarDelegate
(
delegate:
StickyTabBarDelegate
(
child:
Container
(
child:
Container
(
height:
40
,
height:
40
,
color:
Colors
.
white
,
color:
Colors
.
white
,
child:
baseTabBar
(
tabController
,
getTabs
(),
(
index
)
{
child:
baseTabBar
(
null
,
getTabs
(),
(
index
)
{
_model
.
selectTab
(
index
);
_model
.
selectTab
(
index
);
},
scroll:
false
),
},
scroll:
false
),
)),
)),
),
),
];
];
},
},
body:
TabBarView
(
controller:
tabController
,
children:
list
));
body:
TabBarView
(
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,84 +71,99 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
...
@@ -53,84 +71,99 @@ 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
(
children:
<
Widget
>[
child:
BaseNestedScrollViewRefreshIndicator
(
Container
(
onRefresh:
()
async
{
width:
MediaQuery
.
of
(
context
).
size
.
width
,
Completer
completer
=
new
Completer
();
height:
MediaQuery
.
of
(
context
).
size
.
height
,
_model
.
init
(()
{
child:
NotificationListener
(
_initTabBar
();
onNotification:
(
scrollNotification
)
{
SimpleEventBus
.
instance
().
notifyListener
(
"TopList"
,
""
);
if
(
scrollNotification
is
KeepAliveNotification
||
completer
.
complete
();
scrollNotification
is
OverscrollIndicatorNotification
)
{
});
return
false
;
return
completer
.
future
;
}
},
if
(
scrollNotification
is
ScrollUpdateNotification
&&
child:
homeWarp
()),
scrollNotification
.
metrics
.
axisDirection
.
index
==
2
)
{}
print
(
"NOT
${scrollNotification}
${scrollNotification is KeepAliveNotification}
"
);
if
(
scrollNotification
.
depth
==
0
)
{
if
(
scrollNotification
.
metrics
.
pixels
>
80
)
{
_model
.
textLive
.
notifyView
(
(
scrollNotification
.
metrics
.
pixels
-
80
)
/
40
>
1.0
?
1.0
:
(
scrollNotification
.
metrics
.
pixels
-
80
)
/
40
);
}
else
{
_model
.
textLive
.
notifyView
(
0.0
);
}
}
else
if
(
scrollNotification
.
depth
==
2
)
{
if
(
scrollNotification
.
metrics
.
pixels
<
50
&&
scrollNotification
.
metrics
.
pixels
>
0
)
{
_model
.
textLive
.
notifyView
(
1.0
);
}
}
return
false
;
},
child:
home
(),
),
),
baseSliverBack
(()
{
Navigator
.
of
(
context
).
pop
();
}),
baseSliverTitle
(
"title"
,
MediaQuery
.
of
(
context
).
size
.
width
,
_model
.
textLive
)
],
),
()
{
),
()
{
init
();
init
();
}),
}),
);
);
}
}
Widget
homeWarp
()
{
return
Stack
(
children:
<
Widget
>[
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
,
height:
MediaQuery
.
of
(
context
).
size
.
height
,
child:
NotificationListener
(
onNotification:
(
scrollNotification
)
{
if
(
scrollNotification
is
KeepAliveNotification
||
scrollNotification
is
OverscrollIndicatorNotification
)
{
return
false
;
}
if
(
scrollNotification
is
ScrollUpdateNotification
&&
scrollNotification
.
metrics
.
axisDirection
.
index
==
2
)
{}
if
(
scrollNotification
.
depth
==
0
)
{
if
(
scrollNotification
.
metrics
.
pixels
>
80
)
{
_model
.
textLive
.
notifyView
(
(
scrollNotification
.
metrics
.
pixels
-
80
)
/
40
>
1.0
?
1.0
:
(
scrollNotification
.
metrics
.
pixels
-
80
)
/
40
);
}
else
{
_model
.
textLive
.
notifyView
(
0.0
);
}
}
else
if
(
scrollNotification
.
depth
==
2
)
{
if
(
scrollNotification
.
metrics
.
pixels
<
50
&&
scrollNotification
.
metrics
.
pixels
>
0
)
{
_model
.
textLive
.
notifyView
(
1.0
);
}
}
return
false
;
},
child:
home
(),
),
),
baseSliverBack
(()
{
Navigator
.
of
(
context
).
pop
();
}),
baseSliverTitle
(
"title"
,
MediaQuery
.
of
(
context
).
size
.
width
,
_model
.
textLive
)
],
);
}
Widget
home
()
{
Widget
home
()
{
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
)
{
},
return
<
Widget
>[
headerSliverBuilder:
(
BuildContext
context
,
bool
innerBoxIsScrolled
)
{
SliverOverlapAbsorber
(
return
<
Widget
>[
handle:
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
SliverOverlapAbsorber
(
context
),
handle:
extend
.
NestedScrollView
.
sliverOverlapAbsorberHandleFor
(
sliver:
baseSliverAppBar
(
_model
.
imageUrl
)),
context
),
SliverPersistentHeader
(
sliver:
baseSliverAppBar
(
_model
.
imageUrl
)),
pinned:
true
,
SliverPersistentHeader
(
delegate:
StickyTabBarDelegate
(
pinned:
true
,
child:
Container
(
delegate:
StickyTabBarDelegate
(
height:
40
,
child:
Container
(
color:
Colors
.
white
,
height:
40
,
child:
baseTabBar
(
null
,
getTabs
(),
(
index
)
{
color:
Colors
.
white
,
_model
.
selectTab
(
index
);
child:
baseTabBar
(
tabController
,
getTabs
(),
(
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