fix: ultra-fake orders

This commit is contained in:
2024-06-18 20:40:45 +03:00
parent bdcd4507c2
commit 893b925a04
7 changed files with 170 additions and 191 deletions

View File

@@ -1,3 +1,5 @@
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:gymlink_module_web/components/app_bar.dart';
@@ -69,6 +71,57 @@ class _OrderConfirmationPageState extends State<OrderConfirmationPage> {
final _addressController = TextEditingController();
final _nameController = TextEditingController();
Future<void> _addOrderToHistory() async {
String name = _nameController.text;
String email = _emailController.text;
String address = _addressController.text;
Set<String> supplierIdsSet = {};
for (final item in cartItems) {
supplierIdsSet.add(item.supplierId);
}
List<GymHistoryItemDetailProvider> providers = [];
for (final supplierId in supplierIdsSet) {
List<GymItem> items =
cartItems.where((e) => e.supplierId == supplierId).toList();
List<GymHistoryItemDetailItem> detailItems = [];
for (final item in items) {
detailItems.add(GymHistoryItemDetailItem(
id: item.id,
photo: item.images[0].url,
count: item.localCount,
price: item.price.toString(),
name: item.title,
));
}
GymHistoryItemDetailProvider provider = GymHistoryItemDetailProvider(
id: supplierId,
name: items.first.supplierName,
items: detailItems,
// status: 'Не оплачен'
status: Random().nextBool()
? 'Не оплачен'
: Random().nextBool()
? 'Не оплачен'
: Random().nextBool()
? 'Сборка'
: 'Доставляется',
);
providers.add(provider);
}
final order = GymHistoryItemDetail(
id: Random().nextInt(1000000).toString(),
receiver: name,
email: email,
address: address,
sum: totalPrice.toString(),
date: '',
providers: providers,
);
await addToHistory(order);
}
@override
void initState() {
super.initState();
@@ -248,12 +301,7 @@ class _OrderConfirmationPageState extends State<OrderConfirmationPage> {
if (!_checkInputs()) return;
_goToPage();
await clearCart();
await addToHistory(GymHistoryItem(
id: '123',
date: '01.01.1970',
sum: '123',
photo: 'product.png',
));
await _addOrderToHistory();
Provider.of<CartProvider>(context, listen: false)
.updateCartLength();
Navigator.of(context).pushAndRemoveUntil(

View File

@@ -153,10 +153,22 @@ class _HistoryPageState extends State<HistoryPage> {
id: item.id,
cost: item.sum,
date: item.date,
image: Image(
image: AssetImage(
'assets/${item.photo}'),
width: 50,
image: FutureBuilder(
future: precacheImage(
NetworkImage(item.photo),
context),
builder: (context, snapshot) {
if (snapshot.connectionState ==
ConnectionState.done) {
return Image(
image: NetworkImage(
item.photo),
width: 50,
);
} else {
return const CircularProgressIndicator();
}
},
),
);
},

View File

@@ -8,6 +8,7 @@ import 'package:gymlink_module_web/components/heading.dart';
import 'package:gymlink_module_web/components/order_detail_item_card.dart';
import 'package:gymlink_module_web/interfaces/items.dart';
import 'package:gymlink_module_web/tools/history.dart';
import 'package:gymlink_module_web/tools/text.dart';
import 'package:url_launcher/url_launcher.dart';
final GymHistoryItemDetail item = GymHistoryItemDetail.fromJson({
@@ -77,8 +78,7 @@ class _OrderInfoPageState extends State<OrderInfoPage> {
Future<void> _goToPage() async {
if (detail?.payUrl != null) {
final Uri url = Uri.parse(detail?.payUrl ?? 'example.org');
detail!.payUrl = null;
final Uri url = Uri.parse(detail?.payUrl ?? 'https://example.org');
if (!await launchUrl(url, webOnlyWindowName: '_blank')) {
throw 'Could not launch $url';
}
@@ -160,14 +160,12 @@ class _OrderInfoPageState extends State<OrderInfoPage> {
OrderDetailCardItemCard(
image: FutureBuilder(
future: precacheImage(
const AssetImage('assets/product.png'),
context),
NetworkImage(item.photo), context),
builder: (context, snapshot) {
if (snapshot.connectionState ==
ConnectionState.done) {
return const Image(
image:
AssetImage('assets/product.png'),
return Image(
image: NetworkImage(item.photo),
width: 50,
);
} else {
@@ -175,7 +173,7 @@ class _OrderInfoPageState extends State<OrderInfoPage> {
}
},
),
name: 'Протеин',
name: shortString(item.name),
count: item.count,
price: double.parse(item.price),
),
@@ -207,13 +205,15 @@ class _OrderInfoPageState extends State<OrderInfoPage> {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
MarkdownBody(
data: '## Итого: ${detail!.sum} руб.'),
MarkdownBody(
data:
"### Адрес получателя: __${detail!.address}__"),
MarkdownBody(
data: '### Почта: __${detail!.email}__'),
MarkdownBody(
data: '### ФИО: _${detail!.receiver}_'),
data: '### ФИО: __${detail!.receiver}__'),
],
),
detail?.payUrl == null
@@ -222,7 +222,7 @@ class _OrderInfoPageState extends State<OrderInfoPage> {
child: ElevatedButton(
onPressed: () async {
await _goToPage();
debugPrint('clicked');
await payOrder(detail!.id);
},
style: ElevatedButton.styleFrom(
backgroundColor:
@@ -261,102 +261,4 @@ class _OrderInfoPageState extends State<OrderInfoPage> {
: _buildContent(),
);
}
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// appBar: const GymLinkAppBar(),
// body: detail == null
// ? const Center(child: CircularProgressIndicator())
// : Column(
// mainAxisAlignment: MainAxisAlignment.start,
// children: [
// GymLinkHeader(title: "Заказ #${detail?.id} от ${detail?.date}"),
// Expanded(
// child: RefreshIndicator(
// onRefresh: () => _onRefresh(),
// edgeOffset: 55,
// child: Scrollbar(
// controller: _scrollController,
// child: ListView(
// shrinkWrap: true,
// controller: _scrollController,
// children: [
// detail != null
// ? ListView.builder(
// itemCount: (detail!.providers.length + 1),
// shrinkWrap: true,
// physics: const NeverScrollableScrollPhysics(),
// itemBuilder: (context, index) {
// final provider = detail!.providers[0];
// return Card(
// elevation: 3,
// child: Column(
// children: [
// MarkdownBody(
// data: '# ${provider.name}'),
// MarkdownBody(
// data:
// '## Статус: ${provider.status}'),
// const MarkdownBody(
// data: '### Состав:'),
// for (final item in provider.items)
// OrderDetailCardItemCard(
// image: FutureBuilder(
// future: precacheImage(
// const AssetImage(
// 'assets/product.png'),
// context),
// builder: (context, snapshot) {
// if (snapshot
// .connectionState ==
// ConnectionState.done) {
// return const Image(
// image: AssetImage(
// 'assets/product.png'),
// width: 50,
// );
// } else {
// return const CircularProgressIndicator();
// }
// },
// ),
// name: 'Протеин',
// count: item.count,
// price: double.parse(item.price),
// ),
// ],
// ),
// );
// },
// )
// : const SizedBox.shrink(),
// Card(
// elevation: 4,
// child: Padding(
// padding: const EdgeInsetsDirectional.symmetric(
// horizontal: 10, vertical: 20),
// child: Column(
// mainAxisSize: MainAxisSize.min,
// children: [
// MarkdownBody(
// data:
// "### Адрес получателя: _${detail!.address}_"),
// Markdown(
// data: '### Почта: _${detail!.email}_'),
// // Markdown(
// // data: '### ФИО: _${detail!.receiver}_'),
// ],
// ),
// ),
// ),
// ],
// ),
// ),
// ),
// ),
// ],
// ),
// );
// }
}