Some relative stuff

This commit is contained in:
2024-05-11 23:27:01 +03:00
parent 57ff8a59e8
commit 75bfc7ea6b
10 changed files with 200 additions and 19 deletions

View File

@@ -35,8 +35,8 @@ class HistoryItemCard extends StatelessWidget {
constraints: const BoxConstraints( constraints: const BoxConstraints(
minHeight: 100, minHeight: 100,
maxHeight: 200, maxHeight: 200,
minWidth: 400, minWidth: 600,
maxWidth: 600, maxWidth: 800,
), ),
child: Card( child: Card(
elevation: 4, elevation: 4,

View File

@@ -14,12 +14,20 @@ class ProductCard extends StatelessWidget {
required this.onTap, required this.onTap,
}); });
double getCardHeight({required BuildContext context}) {
if (MediaQuery.of(context).size.width > 600) {
return 200;
}
return 100;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: ConstrainedBox( child: ConstrainedBox(
constraints: const BoxConstraints(minHeight: 200), constraints: BoxConstraints(
minHeight: 80, maxHeight: getCardHeight(context: context)),
child: Card( child: Card(
elevation: 3, elevation: 3,
color: Theme.of(context).scaffoldBackgroundColor, color: Theme.of(context).scaffoldBackgroundColor,

View File

@@ -4,6 +4,7 @@ import 'package:gymlink_module_web/components/item_card.dart';
import 'package:gymlink_module_web/pages/basket.dart'; import 'package:gymlink_module_web/pages/basket.dart';
import 'package:gymlink_module_web/pages/detail.dart'; import 'package:gymlink_module_web/pages/detail.dart';
import 'package:gymlink_module_web/pages/order_history.dart'; import 'package:gymlink_module_web/pages/order_history.dart';
import 'package:gymlink_module_web/tools/relative.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
const List<Map<String, String>> testData = [ const List<Map<String, String>> testData = [
@@ -111,9 +112,7 @@ class _MainPageState extends State<MainPage> {
), ),
), ),
), ),
const Spacer( getSpacer(context: context, flex: 2),
flex: 2,
),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
Navigator.of(context).push(MaterialPageRoute( Navigator.of(context).push(MaterialPageRoute(

View File

@@ -2,36 +2,32 @@ import 'package:flutter/material.dart';
import 'package:gymlink_module_web/components/app_bar.dart'; import 'package:gymlink_module_web/components/app_bar.dart';
import 'package:gymlink_module_web/components/heading.dart'; import 'package:gymlink_module_web/components/heading.dart';
import 'package:gymlink_module_web/components/history_item_card.dart'; import 'package:gymlink_module_web/components/history_item_card.dart';
import 'package:gymlink_module_web/tools/relative.dart';
List<Map<String, String>> orders = [ List<Map<String, String>> orders = [
{ {"image": "product.png", "price": "120", "id": "66", "date": "11.09.2001"},
"image": "product.png",
"price": "120",
"id": "34fa3126-bfaf-5dec-8f4a-b246c097ef73",
"date": "11.09.2001"
},
{ {
"image": "product.png", "image": "product.png",
"price": "150", "price": "150",
"id": "34a26e82-7656-5e98-a44a-c2d01d0b1ad1123", "id": "56",
"date": "11.09.2001", "date": "11.09.2001",
}, },
{ {
"image": "product.png", "image": "product.png",
"price": "250", "price": "250",
"id": "4fb204b7-3f9e-52a2-bed1-415c00a31a37123", "id": "98",
"date": "11.09.2001", "date": "11.09.2001",
}, },
{ {
"image": "product.png", "image": "product.png",
"price": "300", "price": "300",
"id": "09b2f5bb-683e-5c39-ae89-b8e152fa8bcf123", "id": "50",
"date": "11.09.2001", "date": "11.09.2001",
}, },
{ {
"image": "product.png", "image": "product.png",
"price": "100", "price": "100",
"id": "cd1b6817-db94-5394-be1d-af88af79749f123", "id": "30",
"date": "11.09.2001", "date": "11.09.2001",
} }
]; ];
@@ -40,6 +36,7 @@ class HistoryPage extends StatelessWidget {
const HistoryPage({ const HistoryPage({
super.key, super.key,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@@ -69,7 +66,7 @@ class HistoryPage extends StatelessWidget {
}, },
), ),
), ),
const Spacer(), getSpacer(context: context)
], ],
), ),
), ),

26
lib/pages/order_pay.dart Normal file
View File

@@ -0,0 +1,26 @@
import 'dart:ui_web' as ui;
import 'package:flutter/material.dart';
import 'package:universal_html/html.dart';
class OrderPayPage extends StatelessWidget {
const OrderPayPage({super.key});
@override
Widget build(BuildContext context) {
registerHtmlElementView();
return const HtmlElementView(
viewType: 'payment-html',
);
}
void registerHtmlElementView() {
ui.platformViewRegistry.registerViewFactory(
'payment-html',
(int viewId) => IFrameElement()
..src = 'payment.html'
..style.width = '100%'
..style.height = '500px'
..style.border = 'none');
}
}

View File

@@ -4,9 +4,9 @@ import 'package:gymlink_module_web/pages/main.dart';
import 'package:gymlink_module_web/theme.dart'; import 'package:gymlink_module_web/theme.dart';
class MyAppStateMobile extends State<MyApp> { class MyAppStateMobile extends State<MyApp> {
bool _isLoading = true; bool _isLoading = false;
ThemeData theme = myTheme; ThemeData theme = myTheme;
bool black_theme = true; bool black_theme = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@@ -13,6 +13,7 @@ ThemeData getThemeData(Color color, bool dark) {
).copyWith( ).copyWith(
onPrimary: dark ? materialColor[600] : Colors.white, onPrimary: dark ? materialColor[600] : Colors.white,
), ),
useMaterial3: true,
); );
} }

11
lib/tools/relative.dart Normal file
View File

@@ -0,0 +1,11 @@
import 'package:flutter/material.dart';
Widget getSpacer(
{required BuildContext context, int flex = 1, double width = 10}) {
if (MediaQuery.of(context).size.width > 600) {
return Spacer(
flex: flex,
);
}
return SizedBox(width: width);
}

View File

@@ -1,6 +1,14 @@
# Generated by pub # Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile # See https://dart.dev/tools/pub/glossary#lockfile
packages: packages:
args:
dependency: transitive
description:
name: args
sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
url: "https://pub.dev"
source: hosted
version: "2.5.0"
async: async:
dependency: transitive dependency: transitive
description: description:
@@ -25,6 +33,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0"
charcode:
dependency: transitive
description:
name: charcode
sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306
url: "https://pub.dev"
source: hosted
version: "1.3.1"
clock: clock:
dependency: transitive dependency: transitive
description: description:
@@ -41,6 +57,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.18.0" version: "1.18.0"
csslib:
dependency: transitive
description:
name: csslib
sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
cupertino_icons: cupertino_icons:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -86,6 +110,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.2" version: "3.0.2"
flutter_markdown:
dependency: "direct main"
description:
name: flutter_markdown
sha256: "9921f9deda326f8a885e202b1e35237eadfc1345239a0f6f0f1ff287e047547f"
url: "https://pub.dev"
source: hosted
version: "0.7.1"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@@ -96,6 +128,30 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
html:
dependency: transitive
description:
name: html
sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
url: "https://pub.dev"
source: hosted
version: "0.15.4"
http:
dependency: "direct main"
description:
name: http
sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938"
url: "https://pub.dev"
source: hosted
version: "1.2.1"
http_parser:
dependency: transitive
description:
name: http_parser
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
leak_tracker: leak_tracker:
dependency: transitive dependency: transitive
description: description:
@@ -128,6 +184,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.0" version: "3.0.0"
markdown:
dependency: transitive
description:
name: markdown
sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
url: "https://pub.dev"
source: hosted
version: "7.2.2"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
@@ -309,6 +373,30 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.1" version: "0.6.1"
typed_data:
dependency: transitive
description:
name: typed_data
sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
url: "https://pub.dev"
source: hosted
version: "1.3.2"
universal_html:
dependency: "direct main"
description:
name: universal_html
sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971"
url: "https://pub.dev"
source: hosted
version: "2.2.4"
universal_io:
dependency: transitive
description:
name: universal_io
sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad"
url: "https://pub.dev"
source: hosted
version: "2.2.2"
url_launcher: url_launcher:
dependency: "direct main" dependency: "direct main"
description: description:

51
web/payment.html Normal file
View File

@@ -0,0 +1,51 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Прием платежа с помощью виджета ЮKassa</title>
<!--Подключение библиотеки для инициализации виджета ЮKassa-->
<script src="https://yookassa.ru/checkout-widget/v1/checkout-widget.js"></script>
</head>
<body>
Ниже отобразится платежная форма. Если вы еще не создавали платеж и не передавали токен для инициализации виджета, появится сообщение об ошибке.
<!--Контейнер, в котором будет отображаться платежная форма-->
<div id="payment-form"></div>
Данные банковской карты для оплаты в <b>тестовом магазине</b>:
- номер — <b>5555 5555 5555 4477</b>
- срок действия — <b>01/30</b> (или другая дата, больше текущей)
- CVC — <b>123</b> (или три любые цифры)
- код для прохождения 3-D Secure — <b>123</b> (или три любые цифры)
<a href=https://yookassa.ru/developers/payment-acceptance/testing-and-going-live/testing#test-bank-card>Другие тестовые банковские карты</a>
<script>
//Инициализация виджета. Все параметры обязательные.
const checkout = new window.YooMoneyCheckoutWidget({
confirmation_token: 'ct-287e0c37-000f-5000-8000-16961d35b0fd', //Токен, который перед проведением оплаты нужно получить от ЮKassa
return_url: 'https://example.com/', //Ссылка на страницу завершения оплаты, это может быть любая ваша страница
//При необходимости можно изменить цвета виджета, подробные настройки см. в документации
//customization: {
//Настройка цветовой схемы, минимум один параметр, значения цветов в HEX
//colors: {
//Цвет акцентных элементов: кнопка Заплатить, выбранные переключатели, опции и текстовые поля
//control_primary: '#00BF96', //Значение цвета в HEX
//Цвет платежной формы и ее элементов
//background: '#F2F3F5' //Значение цвета в HEX
//}
//},
error_callback: function(error) {
console.log(error)
}
});
//Отображение платежной формы в контейнере
checkout.render('payment-form');
</script>
</body>
</html>