|
@@ -1,11 +1,13 @@
|
|
|
import 'package:cpt_notice_board/modules/notice_board/page/notice_board_page.dart';
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:auto_route/auto_route.dart';
|
|
|
+import 'package:flutter_hooks/flutter_hooks.dart';
|
|
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
|
import 'package:router/ext/auto_router_extensions.dart';
|
|
|
import 'package:shared/utils/log_utils.dart';
|
|
|
import 'package:shared/utils/color_utils.dart';
|
|
|
import 'package:widgets/ext/ex_widget.dart';
|
|
|
+import 'package:widgets/load_state_layout.dart';
|
|
|
import 'package:widgets/my_load_image.dart';
|
|
|
import 'package:widgets/widget_export.dart';
|
|
|
import 'package:cs_resources/generated/assets.dart';
|
|
@@ -28,7 +30,7 @@ class AnnounPage extends HookConsumerWidget {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- Widget _buildItemLeftSection(BuildContext context, WidgetRef ref, item, _vm) {
|
|
|
+ Widget _buildItemLeftSection(BuildContext context, WidgetRef ref, item, vm) {
|
|
|
return Container(
|
|
|
// color: Colors.blue,
|
|
|
child: Text(
|
|
@@ -42,11 +44,12 @@ class AnnounPage extends HookConsumerWidget {
|
|
|
),
|
|
|
);
|
|
|
}
|
|
|
- Widget _buildItemRightSection(BuildContext context, WidgetRef ref, item, _vm) {
|
|
|
+
|
|
|
+ Widget _buildItemRightSection(BuildContext context, WidgetRef ref, item, vm) {
|
|
|
return Container(
|
|
|
// color: Colors.green,
|
|
|
child: Text(
|
|
|
- item['price'],
|
|
|
+ item['created_at'],
|
|
|
style: const TextStyle(
|
|
|
fontSize: 14.0,
|
|
|
color: Colors.black,
|
|
@@ -56,13 +59,14 @@ class AnnounPage extends HookConsumerWidget {
|
|
|
}
|
|
|
|
|
|
// listitem
|
|
|
- Widget _buildSaleItem(BuildContext context, WidgetRef ref, item, _vm) {
|
|
|
+ Widget _buildSaleItem(BuildContext context, WidgetRef ref, item, vm) {
|
|
|
return Container(
|
|
|
-
|
|
|
decoration: const BoxDecoration(
|
|
|
color: Colors.white,
|
|
|
borderRadius: BorderRadius.all(Radius.circular(6.0)),
|
|
|
- boxShadow: [BoxShadow(color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)],
|
|
|
+ boxShadow: [
|
|
|
+ BoxShadow(color: Color.fromRGBO(184, 191, 217, 0.3), blurRadius: 6)
|
|
|
+ ],
|
|
|
),
|
|
|
child: Column(
|
|
|
children: [
|
|
@@ -74,60 +78,74 @@ class AnnounPage extends HookConsumerWidget {
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
|
children: [
|
|
|
- _buildItemLeftSection(context, ref, item, _vm).marginOnly(bottom: 5),
|
|
|
- _buildItemRightSection(context, ref, item, _vm),
|
|
|
+ _buildItemLeftSection(context, ref, item, vm)
|
|
|
+ .marginOnly(bottom: 5),
|
|
|
+ _buildItemRightSection(context, ref, item, vm),
|
|
|
],
|
|
|
- ).paddingOnly(left: 20,right: 20),
|
|
|
+ ).paddingOnly(left: 20, right: 20),
|
|
|
).constrained(
|
|
|
minHeight: 117.5,
|
|
|
),
|
|
|
],
|
|
|
).onTap(() {
|
|
|
// 去详情
|
|
|
- // Navigator.push(
|
|
|
- // context,
|
|
|
- // MaterialPageRoute(builder: (context) => AnnouncementDetailPage()),
|
|
|
- // );
|
|
|
AnnouncementDetailPage.startInstance(context: context);
|
|
|
- // _vm.goNewsDetail(item['title']);
|
|
|
}),
|
|
|
).marginOnly(left: 15, bottom: 15, right: 15);
|
|
|
}
|
|
|
|
|
|
// list
|
|
|
- Widget _buildSaleList(BuildContext context, WidgetRef ref, _vm) {
|
|
|
- List itemsList = _vm.state.list.toList();
|
|
|
+ Widget _buildSaleList(BuildContext context, WidgetRef ref, vm) {
|
|
|
+ List itemsList = vm.state.list.toList();
|
|
|
return ListView.builder(
|
|
|
itemCount: itemsList.length,
|
|
|
itemBuilder: (context, index) {
|
|
|
- return _buildSaleItem(context, ref, itemsList[index], _vm);
|
|
|
+ return _buildSaleItem(context, ref, itemsList[index], vm);
|
|
|
},
|
|
|
);
|
|
|
}
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context, WidgetRef ref) {
|
|
|
- final _vm = ref.read(announVmProvider.notifier);
|
|
|
-
|
|
|
+ final vm = ref.read(announVmProvider.notifier);
|
|
|
+ final state = ref.watch(announVmProvider);
|
|
|
+ useEffect(() {
|
|
|
+ // 组件挂载时执行 - 执行接口请求
|
|
|
+ Future.microtask(() => vm.initPageData());
|
|
|
+ return () {
|
|
|
+ // 组件卸载时执行
|
|
|
+ Log.d("property_news_page 组件卸载时执行");
|
|
|
+ };
|
|
|
+ }, []);
|
|
|
return Scaffold(
|
|
|
// appBar: AppBar(title: Text("资产")),
|
|
|
- body: Container(
|
|
|
+ body: SizedBox(
|
|
|
+ width: double.infinity,
|
|
|
+ height: double.infinity,
|
|
|
child: EasyRefresh(
|
|
|
- // 上拉加载
|
|
|
- onLoad: () async {
|
|
|
- Log.d("----onLoad");
|
|
|
- _vm.onLoadData();
|
|
|
- },
|
|
|
- // 下拉刷新
|
|
|
- onRefresh: () async {
|
|
|
- Log.d("----onRefresh");
|
|
|
- _vm.refreshListData();
|
|
|
- },
|
|
|
- child: Container(
|
|
|
- color: ColorUtils.string2Color('#F2F3F6'),
|
|
|
- padding: const EdgeInsets.only(top: 15),
|
|
|
- child: _buildSaleList(context, ref, _vm)),
|
|
|
- )),
|
|
|
+ controller: vm.refreshController,
|
|
|
+ // 上拉加载
|
|
|
+ onLoad: () async {
|
|
|
+ Log.d("----onLoad");
|
|
|
+ vm.loadMore();
|
|
|
+ },
|
|
|
+ // 下拉刷新
|
|
|
+ onRefresh: () async {
|
|
|
+ Log.d("----onRefresh");
|
|
|
+ vm.onRefresh();
|
|
|
+ },
|
|
|
+ child: Container(
|
|
|
+ color: ColorUtils.string2Color('#F2F3F6'),
|
|
|
+ padding: const EdgeInsets.only(top: 15),
|
|
|
+ child: LoadStateLayout(
|
|
|
+ state: state.loadingState,
|
|
|
+ errorMessage: state.errorMessage,
|
|
|
+ errorRetry: () {
|
|
|
+ vm.retryRequest();
|
|
|
+ },
|
|
|
+ successSliverWidget: [_buildSaleList(context, ref, vm)],
|
|
|
+ ),
|
|
|
+ ))),
|
|
|
);
|
|
|
}
|
|
|
}
|