1
1
import 'dart:async' ;
2
2
3
3
import 'package:animations/animations.dart' ;
4
+ import 'package:flutter/foundation.dart' ;
4
5
import 'package:flutter_riverpod/flutter_riverpod.dart' ;
6
+ import 'package:gsy_github_app_flutter/db/provider/repos/trend_repository_db_provider.dart' ;
5
7
import 'package:gsy_github_app_flutter/page/repos/repository_detail_page.dart' ;
6
8
import 'package:flutter/material.dart' ;
7
9
import 'package:flutter/rendering.dart' ;
8
- import 'package:flutter_redux/flutter_redux.dart' ;
9
10
import 'package:fluttertoast/fluttertoast.dart' ;
10
11
import 'package:gsy_github_app_flutter/common/localization/default_localizations.dart' ;
11
- import 'package:gsy_github_app_flutter/page/trend/trend_bloc.dart' ;
12
12
import 'package:gsy_github_app_flutter/model/TrendingRepoModel.dart' ;
13
+ import 'package:gsy_github_app_flutter/page/trend/trend_provider.dart' ;
13
14
import 'package:gsy_github_app_flutter/page/trend/trend_user_page.dart' ;
14
15
import 'package:gsy_github_app_flutter/provider/app_state_provider.dart' ;
15
- import 'package:gsy_github_app_flutter/redux/gsy_state.dart' ;
16
16
import 'package:gsy_github_app_flutter/common/style/gsy_style.dart' ;
17
17
import 'package:gsy_github_app_flutter/common/utils/navigator_utils.dart' ;
18
18
import 'package:gsy_github_app_flutter/widget/gsy_card_item.dart' ;
19
19
import 'package:gsy_github_app_flutter/widget/pull/nested/gsy_sliver_header_delegate.dart' ;
20
20
import 'package:gsy_github_app_flutter/widget/pull/nested/nested_refresh.dart' ;
21
21
import 'package:gsy_github_app_flutter/page/repos/widget/repos_item.dart' ;
22
- import 'package:redux/redux.dart' ;
23
22
24
23
/// 主页趋势tab页
25
24
/// 目前采用纯 bloc 的 rxdart(stream) + streamBuilder
@@ -51,9 +50,6 @@ class TrendPageState extends ConsumerState<TrendPage>
51
50
///滚动控制与监听
52
51
final ScrollController scrollController = ScrollController ();
53
52
54
- ///bloc
55
- final TrendBloc trendBloc = TrendBloc ();
56
-
57
53
///显示刷新
58
54
_showRefreshLoading () {
59
55
Future .delayed (const Duration (seconds: 0 ), () {
@@ -97,7 +93,7 @@ class TrendPageState extends ConsumerState<TrendPage>
97
93
}
98
94
99
95
///绘制头部可选item
100
- _renderHeader (Store < GSYState > store, Radius radius) {
96
+ _renderHeader (Radius radius) {
101
97
if (selectTime == null && selectType == null ) {
102
98
return Container ();
103
99
}
@@ -116,7 +112,7 @@ class TrendPageState extends ConsumerState<TrendPage>
116
112
children: < Widget > [
117
113
_renderHeaderPopItem (selectTime! .name, trendTimeList,
118
114
(TrendTypeModel result) {
119
- if (trendBloc.isLoading ) {
115
+ if (trendLoadingState ) {
120
116
Fluttertoast .showToast (
121
117
msg: GSYLocalizations .i18n (context)! .loading_text);
122
118
return ;
@@ -136,7 +132,7 @@ class TrendPageState extends ConsumerState<TrendPage>
136
132
Container (height: 10.0 , width: 0.5 , color: GSYColors .white),
137
133
_renderHeaderPopItem (selectType! .name, trendTypeList,
138
134
(TrendTypeModel result) {
139
- if (trendBloc.isLoading ) {
135
+ if (trendLoadingState ) {
140
136
Fluttertoast .showToast (
141
137
msg: GSYLocalizations .i18n (context)! .loading_text);
142
138
return ;
@@ -186,15 +182,17 @@ class TrendPageState extends ConsumerState<TrendPage>
186
182
}
187
183
188
184
Future <void > requestRefresh () async {
189
- return trendBloc.requestRefresh (selectTime, selectType);
185
+ var query = (selectTime? .value, selectType? .value);
186
+ var _ = ref.refresh (trendFirstProvider (query));
187
+ await ref.read (trendFirstProvider (query).future);
190
188
}
191
189
192
190
@override
193
191
bool get wantKeepAlive => true ;
194
192
195
193
@override
196
194
void didChangeDependencies () {
197
- if (! trendBloc.requested ) {
195
+ if (! trendRequestedState ) {
198
196
setState (() {
199
197
selectTime = trendTime (context)[0 ];
200
198
selectType = trendType (context)[0 ];
@@ -247,43 +245,44 @@ class TrendPageState extends ConsumerState<TrendPage>
247
245
@override
248
246
Widget build (BuildContext context) {
249
247
super .build (context); // See AutomaticKeepAliveClientMixin.
250
- return StoreBuilder <GSYState >(
251
- builder: (context, store) {
252
- return Scaffold (
253
- backgroundColor: GSYColors .mainBackgroundColor,
254
248
255
- ///采用目前采用纯 bloc 的 rxdart(stream) + streamBuilder
256
- body: StreamBuilder <List <TrendingRepoModel >?>(
257
- stream: trendBloc.stream,
258
- builder: (context, snapShot) {
259
- ///下拉刷新
260
- return NestedScrollViewRefreshIndicator (
261
- key: refreshIndicatorKey,
262
- onRefresh: requestRefresh,
249
+ ///展示非注解的 riverpod 并且配置先后顺序
250
+ return Consumer (
251
+ builder: (BuildContext context, WidgetRef ref, Widget ? child) {
252
+ final firstAsync =
253
+ ref.watch (trendFirstProvider ((selectTime? .value, selectType? .value)));
254
+ final secondAsync = ref
255
+ .watch (trendSecondProvider ((selectTime? .value, selectType? .value)));
256
+ var result = secondAsync.value? .data as List <TrendingRepoModel >? ??
257
+ firstAsync.value? .data as List <TrendingRepoModel >? ;
258
+
259
+ return Scaffold (
260
+ backgroundColor: GSYColors .mainBackgroundColor,
261
+ body: NestedScrollViewRefreshIndicator (
262
+ key: refreshIndicatorKey,
263
+ onRefresh: requestRefresh,
263
264
264
- ///嵌套滚动
265
- child: NestedScrollView (
266
- controller: scrollController,
265
+ ///嵌套滚动
266
+ child: NestedScrollView (
267
+ controller: scrollController,
268
+ physics: const AlwaysScrollableScrollPhysics (),
269
+ headerSliverBuilder: (context, innerBoxIsScrolled) {
270
+ return _sliverBuilder (context, innerBoxIsScrolled);
271
+ },
272
+ body: (result == null || result.isEmpty)
273
+ ? _buildEmpty ()
274
+ : ListView .builder (
267
275
physics: const AlwaysScrollableScrollPhysics (),
268
- headerSliverBuilder : (context, innerBoxIsScrolled ) {
269
- return _sliverBuilder (context, innerBoxIsScrolled, store );
276
+ itemBuilder : (context, index ) {
277
+ return _renderItem (result[index] );
270
278
},
271
- body: (snapShot.data == null || snapShot.data! .isEmpty)
272
- ? _buildEmpty ()
273
- : ListView .builder (
274
- physics: const AlwaysScrollableScrollPhysics (),
275
- itemBuilder: (context, index) {
276
- return _renderItem (snapShot.data! [index]);
277
- },
278
- itemCount: snapShot.data! .length,
279
- ),
279
+ itemCount: result.length,
280
280
),
281
- );
282
- }),
283
- floatingActionButton: trendUserButton (),
284
- );
285
- },
286
- );
281
+ ),
282
+ ),
283
+ floatingActionButton: trendUserButton (),
284
+ );
285
+ });
287
286
}
288
287
289
288
trendUserButton () {
@@ -315,8 +314,7 @@ class TrendPageState extends ConsumerState<TrendPage>
315
314
}
316
315
317
316
///嵌套可滚动头部
318
- List <Widget > _sliverBuilder (
319
- BuildContext context, bool innerBoxIsScrolled, Store store) {
317
+ List <Widget > _sliverBuilder (BuildContext context, bool innerBoxIsScrolled) {
320
318
return < Widget > [
321
319
///动态头部
322
320
SliverPersistentHeader (
@@ -341,7 +339,7 @@ class TrendPageState extends ConsumerState<TrendPage>
341
339
child: Padding (
342
340
padding:
343
341
EdgeInsets .only (top: lr, bottom: 15 , left: lr, right: lr),
344
- child: _renderHeader (store as Store < GSYState >, radius),
342
+ child: _renderHeader (radius),
345
343
),
346
344
);
347
345
}),
0 commit comments