提交 c0e5879b 编写于 作者: ramon's avatar ramon

feature: 完成定制产品产品列表页功能;

上级 9438de01
...@@ -16,6 +16,12 @@ ...@@ -16,6 +16,12 @@
"type": "dart", "type": "dart",
"deviceId": "1DA4CCCC-D0B8-47DF-B671-FAC9B80F7030" "deviceId": "1DA4CCCC-D0B8-47DF-B671-FAC9B80F7030"
}, },
{
"name": "Ramon Mac(iOS模拟器)",
"request": "launch",
"type": "dart",
"deviceId": "B7195A0C-A207-403A-AEF5-ACD3D72C22B6"
},
{ {
"name": "my_app2 (profile mode)", "name": "my_app2 (profile mode)",
"request": "launch", "request": "launch",
......
import 'dart:math' as math; import 'dart:math' as math;
import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:my_app2/Assets/AssetImages.dart'; import 'package:my_app2/Assets/AssetImages.dart';
import 'package:my_app2/Customization/ViewModel/ProductListViewModel.dart'; import 'package:my_app2/Customization/ViewModel/ProductListViewModel.dart';
import 'package:my_app2/Models/ProductModel.dart'; import 'package:my_app2/Models/ProductModel.dart';
...@@ -37,21 +39,37 @@ class _CustomizationListImg extends StatefulWidget { ...@@ -37,21 +39,37 @@ class _CustomizationListImg extends StatefulWidget {
} }
class _CustomizationListImgState extends State<_CustomizationListImg> { class _CustomizationListImgState extends State<_CustomizationListImg> {
late EasyRefreshController _refreshController;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
widget.viewModel.pullUp(); _refreshController = widget.viewModel.refreshController;
// widget.viewModel.pullUp();
}
@override
void dispose() {
_refreshController.dispose();
super.dispose();
}
void _onRefresh() {
widget.viewModel.refresh();
}
void _onLoad() {
widget.viewModel.loadMore();
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<ProductListViewModel>( return Consumer<ProductListViewModel>(
builder: (context, viewModel, child) { builder: (context, viewModel, child) {
if (viewModel.isLoading) { // if (viewModel.isLoading) {
return const Center( // return const Center(
child: CircularProgressIndicator(), // child: CircularProgressIndicator(),
); // );
} // }
List<Widget> slivers = []; List<Widget> slivers = [];
if (viewModel.photoProductList.isNotEmpty && if (viewModel.photoProductList.isNotEmpty &&
...@@ -105,7 +123,37 @@ class _CustomizationListImgState extends State<_CustomizationListImg> { ...@@ -105,7 +123,37 @@ class _CustomizationListImgState extends State<_CustomizationListImg> {
), ),
]; ];
} }
return CustomScrollView(slivers: slivers); // return CustomScrollView(slivers: slivers);
final themeData = Theme.of(context);
return EasyRefresh(
controller: _refreshController,
refreshOnStart: true,
refreshOnStartHeader: BuilderHeader(
triggerOffset: 70,
clamping: true,
position: IndicatorPosition.above,
processedDuration: Duration.zero,
builder: (context, state) {
if (state.mode == IndicatorMode.inactive ||
state.mode == IndicatorMode.done) {
return const SizedBox();
}
return Container(
padding: const EdgeInsets.only(bottom: 100),
width: double.infinity,
height: state.viewportDimension,
alignment: Alignment.center,
child: SpinKitDoubleBounce(
size: 32,
color: themeData.colorScheme.primary,
),
);
},
),
onRefresh: _onRefresh,
onLoad: _onLoad,
child: CustomScrollView(slivers: slivers),
);
}, },
); );
} }
......
import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:my_app2/Models/ProductModel.dart'; import 'package:my_app2/Models/ProductModel.dart';
import 'package:my_app2/Network/api/product_api.dart'; import 'package:my_app2/Network/api/product_api.dart';
import 'package:my_app2/Network/http/BaseApi.dart'; import 'package:my_app2/Network/http/BaseApi.dart';
class ProductListViewModel extends ChangeNotifier { class ProductListViewModel extends ChangeNotifier {
final EasyRefreshController refreshController = EasyRefreshController(
controlFinishRefresh: true, controlFinishLoad: true);
final List<ProductModel> _productList = []; final List<ProductModel> _productList = [];
int _page = 1; int _page = 1;
...@@ -48,18 +52,33 @@ class ProductListViewModel extends ChangeNotifier { ...@@ -48,18 +52,33 @@ class ProductListViewModel extends ChangeNotifier {
return _productList.sublist(index); return _productList.sublist(index);
} }
void pullUp() { void refresh() {
var api = ProductListApi(page: 1, pageSize: _pageSize); var api = ProductListApi(page: 1, pageSize: _pageSize);
api.request( api.request(
onSuccessed: (value) { onSuccessed: (value) {
if (value == null) { var list = value ?? [];
return; _page = 1;
} refreshController.finishRefresh();
_updateProductList(value, true); refreshController.resetFooter;
_updateProductList(list, true);
}, },
onFailed: (p0) {}, onFailed: (p0) {},
); );
} }
void loadMore() {} void loadMore() {
var api = ProductListApi(page: _page + 1, pageSize: _pageSize);
api.request(
onSuccessed: (value) {
var list = value ?? [];
_page += 1;
refreshController.finishLoad(list.length >= _pageSize
? IndicatorResult.success
: IndicatorResult.noMore);
_updateProductList(list, false);
},
onFailed: (p0) {},
);
}
} }
...@@ -40,6 +40,10 @@ class MyApp extends StatelessWidget { ...@@ -40,6 +40,10 @@ class MyApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp.router( return MaterialApp.router(
theme: ThemeData(
brightness: Brightness.light,
colorSchemeSeed: const Color(0xFFFFAA22),
useMaterial3: true),
routerConfig: _router, routerConfig: _router,
); );
} }
......
...@@ -238,6 +238,14 @@ packages: ...@@ -238,6 +238,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "2.0.1"
flutter_spinkit:
dependency: "direct main"
description:
name: flutter_spinkit
sha256: "77a2117c0517ff909221f3160b8eb20052ab5216107581168af574ac1f05dff8"
url: "https://pub.dev"
source: hosted
version: "5.1.0"
flutter_swiper_view: flutter_swiper_view:
dependency: "direct main" dependency: "direct main"
description: description:
......
...@@ -42,6 +42,7 @@ dependencies: ...@@ -42,6 +42,7 @@ dependencies:
dio: ^5.0.0 dio: ^5.0.0
provider: ^6.0.5 provider: ^6.0.5
easy_refresh: ^3.3.1 easy_refresh: ^3.3.1
flutter_spinkit: ^5.1.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册