poem_search_page.dart
3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import 'package:flutter/material.dart';
import 'package:Parlando/mvp/base_page.dart';
import 'package:Parlando/mvp/power_presenter.dart';
import 'package:Parlando/poem/iview/poem_search_iview.dart';
import 'package:Parlando/poem/models/search_entity.dart';
import 'package:Parlando/poem/presenter/poem_search_presenter.dart';
import 'package:Parlando/poem/provider/base_list_provider.dart';
import 'package:Parlando/widgets/my_refresh_list.dart';
import 'package:Parlando/widgets/search_bar.dart';
import 'package:Parlando/widgets/state_layout.dart';
import 'package:provider/provider.dart';
import 'package:Parlando/extension/int_extension.dart';
class PoemSearchPage extends StatefulWidget {
const PoemSearchPage({Key? key}) : super(key: key);
@override
_PoemSearchPageState createState() => _PoemSearchPageState();
}
class _PoemSearchPageState extends State<PoemSearchPage>
with BasePageMixin<PoemSearchPage, PowerPresenter>
implements PoemSearchIMvpView {
@override
BaseListProvider<SearchItems> provider = BaseListProvider<SearchItems>();
late String _keyword;
int _page = 1;
@override
void initState() {
provider.stateType = StateType.empty;
super.initState();
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<BaseListProvider<SearchItems>>(
create: (_) => provider,
child: Scaffold(
appBar: SearchBar(
hintText: '请输入要查询的内容',
onPressed: (text) {
if (text.isEmpty) {
showToast('搜索关键字不能为空!');
return;
}
_keyword = text;
provider.setStateType(StateType.loading);
_page = 1;
_poemSearchPresenter.search(_keyword, _page, true);
},
),
body:
Consumer<BaseListProvider<SearchItems>>(builder: (_, provider, __) {
return DeerListView(
key: const Key('poem_search_list'),
itemCount: provider.list.length,
stateType: provider.stateType,
onRefresh: _onRefresh,
loadMore: _loadMore,
itemExtent: 50.0,
hasMore: provider.hasMore,
itemBuilder: (_, index) {
return Container(
padding: EdgeInsets.symmetric(horizontal: 16.px),
alignment: Alignment.centerLeft,
child: Text(provider.list[index].name!),
);
},
);
}),
),
);
}
Future<void> _onRefresh() async {
_page = 1;
await _poemSearchPresenter.search(_keyword, _page, false);
}
Future<void> _loadMore() async {
_page++;
await _poemSearchPresenter.search(_keyword, _page, false);
}
late PoemSearchPresenter _poemSearchPresenter;
@override
PowerPresenter createPresenter() {
final PowerPresenter powerPresenter = PowerPresenter<dynamic>(this);
_poemSearchPresenter = PoemSearchPresenter();
powerPresenter.requestPresenter([_poemSearchPresenter]);
return powerPresenter;
}
}