Skip to content

Commit

Permalink
refactor : item list page
Browse files Browse the repository at this point in the history
  • Loading branch information
yummjin committed Oct 6, 2024
1 parent 5a0b02b commit f13452a
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 120 deletions.
215 changes: 112 additions & 103 deletions lib/screens/products/item_list_page.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:saphy/utils/product_provider.dart';
import 'package:flutter/widgets.dart';
import 'package:saphy/utils/colors.dart';
import 'package:saphy/utils/textstyles.dart';
import 'package:saphy/widgets/product_card.dart';
import 'package:dio/dio.dart';
import 'package:saphy/models/product.dart';

class ItemListPage extends StatefulWidget {
final String name, url;
Expand All @@ -25,9 +26,9 @@ class _ItemListPageState extends State<ItemListPage> {
}

Future<void> countProducts() async {
List<Product> products = await getProducts(); // getProducts()에서 결과를 대기
List<Product> products = await getProducts();
setState(() {
cnt = products.length; // 제품 개수를 cnt에 설정
cnt = products.length;
});
}

Expand All @@ -50,121 +51,129 @@ class _ItemListPageState extends State<ItemListPage> {
throw Exception('Failed to load products');
}
} catch (e) {
print('Error: ${e.toString()}'); // 오류 메시지 확인
return [];
}
}

@override
Widget build(BuildContext context) {
final productProvider = Provider.of<ProductProvider>(context);

return Scaffold(
backgroundColor: const Color(0xfff4f4f4),
appBar: AppBar(
automaticallyImplyLeading: false,
backgroundColor: altWhite,
title: Padding(
padding: const EdgeInsets.only(top: 10.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
icon: const Icon(
Icons.arrow_back_ios,
size: 25,
),
onPressed: () {
Navigator.pop(context);
},
),
IconButton(
icon: const Icon(
Icons.search,
size: 25,
),
onPressed: () {},
),
],
),
),
),
appBar: _appBar(),
body: CustomScrollView(
slivers: [
SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 30.0,
),
child: Text(
widget.name,
style: titleText(),
),
),
),
_buildHeader(),
const SliverToBoxAdapter(
child: SizedBox(
height: 10,
),
child: SizedBox(height: 10),
),
SliverPadding(
padding: const EdgeInsets.symmetric(horizontal: 20),
sliver: SliverToBoxAdapter(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'상품 $cnt',
style: subTitleText(),
),
IconButton(
icon: const Icon(Icons.sort_outlined),
onPressed: () {},
),
],
_buildSorter(),
_buildProductGrid(),
],
),
);
}

AppBar _appBar() {
return AppBar(
automaticallyImplyLeading: false,
backgroundColor: altWhite,
title: Padding(
padding: const EdgeInsets.only(top: 10.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
icon: const Icon(
Icons.arrow_back_ios,
size: 25,
),
onPressed: () {
Navigator.pop(context);
},
),
),
SliverPadding(
padding: const EdgeInsets.all(20),
sliver: SliverToBoxAdapter(
child: Wrap(
direction: Axis.horizontal,
alignment: WrapAlignment.spaceBetween,
spacing: 15,
runSpacing: 15,
children: [
FutureBuilder(
future: _products,
builder: (context, snapshot) {
if (snapshot.connectionState ==
ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error.toString()}');
} else if (!snapshot.hasData ||
snapshot.data!.isEmpty) {
return const Center(child: Text('No products found'));
} else {
final products = snapshot.data!;
return Wrap(
direction: Axis.horizontal,
alignment: WrapAlignment.spaceBetween,
spacing: 15,
runSpacing: 15,
children: products
.map((product) => ProductCard(product: product))
.toList(),
);
}
})
],
IconButton(
icon: const Icon(
Icons.search,
size: 25,
),
onPressed: () {},
),
),
],
],
),
),
);
}

SliverToBoxAdapter _buildHeader() {
return SliverToBoxAdapter(
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 30.0,
),
child: Text(
widget.name,
style: titleText(),
),
),
);
}

SliverPadding _buildSorter() {
return SliverPadding(
padding: const EdgeInsets.symmetric(horizontal: 30),
sliver: SliverToBoxAdapter(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'상품 $cnt',
style: subTitleText(),
),
IconButton(
icon: const Icon(Icons.sort_outlined),
onPressed: () {},
),
],
),
),
);
}

SliverPadding _buildProductGrid() {
return SliverPadding(
padding: const EdgeInsets.only(bottom: 50, right: 20, left: 20, top: 10),
sliver: SliverToBoxAdapter(
child: Wrap(
direction: Axis.horizontal,
alignment: WrapAlignment.spaceBetween,
spacing: 15,
runSpacing: 15,
children: [
FutureBuilder(
future: _products,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error.toString()}');
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
return const Center(child: Text('상품이 없습니다'));
} else {
final products = snapshot.data!;
return Wrap(
direction: Axis.horizontal,
alignment: WrapAlignment.spaceBetween,
spacing: 15,
runSpacing: 15,
children: products
.map((product) => ProductCard(product: product))
.toList(),
);
}
})
],
),
),
);
}
Expand Down
16 changes: 0 additions & 16 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -712,14 +712,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.12.0"
nested:
dependency: transitive
description:
name: nested
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
octo_image:
dependency: transitive
description:
Expand Down Expand Up @@ -840,14 +832,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.4.0"
provider:
dependency: "direct main"
description:
name: provider
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
url: "https://pub.dev"
source: hosted
version: "6.1.2"
pub_semver:
dependency: transitive
description:
Expand Down
1 change: 0 additions & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ dependencies:
carousel_slider: ^5.0.0
card_loading: ^0.3.2
iamport_flutter: ^0.10.19
provider: ^6.0.0

dev_dependencies:
flutter_lints: ^4.0.0
Expand Down

0 comments on commit f13452a

Please sign in to comment.