diff --git a/lib/components/order_confirm_item_card.dart b/lib/components/order_confirm_item_card.dart index 494fab5..afb3b0e 100644 --- a/lib/components/order_confirm_item_card.dart +++ b/lib/components/order_confirm_item_card.dart @@ -46,7 +46,8 @@ class OrderConfirmItemCard extends StatelessWidget { name, style: Theme.of(context).textTheme.bodyLarge, ), - Text('$price руб. x $count = ${price * count} руб.'), + Text( + '${price.toStringAsFixed(2)} руб. x $count = ${(price * count).toStringAsFixed(2)} руб.'), ], ) ], diff --git a/lib/pages/basket.dart b/lib/pages/basket.dart index 2e0f528..8ee675b 100644 --- a/lib/pages/basket.dart +++ b/lib/pages/basket.dart @@ -280,7 +280,7 @@ class _BasketPageState extends State { final item = cartItems[index]; return BasketItemCard( name: item.title, - price: item.price.toString(), + price: item.price.toStringAsFixed(2), id: item.id, image: Image( image: NetworkImage(item.images[0].url), @@ -304,7 +304,7 @@ class _BasketPageState extends State { child: Column( children: [ Text( - 'Итого: $totalPrice руб.', + 'Итого: ${totalPrice.toStringAsFixed(2)} руб.', ), ElevatedButton( onPressed: () => Navigator.of(context).push( diff --git a/lib/pages/detail.dart b/lib/pages/detail.dart index da824c7..9f1032e 100644 --- a/lib/pages/detail.dart +++ b/lib/pages/detail.dart @@ -13,6 +13,7 @@ import 'package:gymlink_module_web/providers/main.dart'; import 'package:gymlink_module_web/tools/items.dart'; import 'package:gymlink_module_web/tools/prefs.dart'; import 'package:gymlink_module_web/tools/routes.dart'; +import 'package:gymlink_module_web/tools/text.dart'; import 'package:http/http.dart' as http; import 'package:provider/provider.dart'; @@ -194,7 +195,7 @@ class _DetailPageState extends State { appBar: const GymLinkAppBar(), body: item != null ? Column(mainAxisAlignment: MainAxisAlignment.start, children: [ - GymLinkHeader(title: item!.title), + GymLinkHeader(title: shortString(item!.title, length: 20)), Expanded( child: SingleChildScrollView( child: Padding( @@ -269,6 +270,14 @@ class _DetailPageState extends State { item!.images[0].url, height: 400, ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 10), + child: Text( + item!.title, + style: Theme.of(context).textTheme.titleLarge, + textAlign: TextAlign.center, + ), + ), Center( child: Padding( padding: const EdgeInsets.symmetric(vertical: 10), @@ -333,7 +342,7 @@ class _DetailPageState extends State { mainAxisSize: MainAxisSize.min, children: [ Text( - 'Стоимость ${item!.price}руб.', + 'Стоимость ${item!.price.toStringAsFixed(2)}руб.', style: Theme.of(context).textTheme.bodyLarge, ), diff --git a/lib/pages/main.dart b/lib/pages/main.dart index e5b9438..effdae4 100644 --- a/lib/pages/main.dart +++ b/lib/pages/main.dart @@ -12,6 +12,7 @@ import 'package:gymlink_module_web/tools/items.dart'; import 'package:gymlink_module_web/tools/prefs.dart'; import 'package:gymlink_module_web/tools/relative.dart'; import 'package:gymlink_module_web/tools/routes.dart'; +import 'package:gymlink_module_web/tools/text.dart'; import 'package:lazy_load_scrollview/lazy_load_scrollview.dart'; import 'package:provider/provider.dart'; @@ -251,7 +252,9 @@ class _MainPageState extends State { child: Scrollbar( child: ListView( children: [ - filteredData.isEmpty && searchText != '' && !isSearching + filteredData.isEmpty && + (searchText != '' || selectedCategory != null) && + !isSearching ? const Center(child: Text('Ничего не найдено')) : isSearching ? const Center(child: CircularProgressIndicator()) @@ -276,8 +279,8 @@ class _MainPageState extends State { .image, width: 50, ), - name: product.title, - price: product.price.toString(), + name: shortString(product.title), + price: product.price.toStringAsFixed(2), onTap: () => Navigator.of(context).push( CustomPageRoute( builder: (context) => DetailPage( diff --git a/lib/pages/order_confirmation.dart b/lib/pages/order_confirmation.dart index 853c9e1..8d5aa49 100644 --- a/lib/pages/order_confirmation.dart +++ b/lib/pages/order_confirmation.dart @@ -61,6 +61,7 @@ class _OrderConfirmationPageState extends State { List cartItems = []; double totalPrice = 0; List gymCart = []; + bool isAgree = false; bool _isLoading = true; @override @@ -107,6 +108,7 @@ class _OrderConfirmationPageState extends State { : ConstrainedBox( constraints: const BoxConstraints(maxHeight: 350), child: ListView.builder( + shrinkWrap: true, itemCount: cartItems.length, itemBuilder: (context, index) { final item = cartItems[index]; @@ -129,7 +131,8 @@ class _OrderConfirmationPageState extends State { Expanded( child: Column( children: [ - MarkdownBody(data: '## Итого: $totalPrice'), + MarkdownBody( + data: '## Итого: ${totalPrice.toStringAsFixed(2)} руб.'), Expanded( child: TextField( decoration: InputDecoration( @@ -161,6 +164,15 @@ class _OrderConfirmationPageState extends State { ), ), ), + CheckboxListTile( + title: const Text('Согласен с обаботкой персональных данных'), + value: isAgree, + onChanged: (value) { + setState(() { + isAgree = value!; + }); + }, + ), ElevatedButton( onPressed: () async { _goToPage(); diff --git a/lib/providers/main.dart b/lib/providers/main.dart index e01f267..69eda9d 100644 --- a/lib/providers/main.dart +++ b/lib/providers/main.dart @@ -27,8 +27,8 @@ class GymLinkProvider with ChangeNotifier { // } } - void changeTheme(int color) { - _blackTheme = !_blackTheme; + void changeTheme(int color, {bool blackTheme = false}) { + _blackTheme = blackTheme; _theme = getThemeData(Color(color), _blackTheme); notifyListeners(); } diff --git a/lib/tools/text.dart b/lib/tools/text.dart new file mode 100644 index 0000000..0ca0f96 --- /dev/null +++ b/lib/tools/text.dart @@ -0,0 +1,9 @@ +String shortString(String text, {int length = 10}) { + if (text.length > length) { + String shortText = text.substring(0, length); + return shortText + + (text.substring(0, length + 1).endsWith(' ') ? '' : '...'); + } else { + return text; + } +}