Compare commits
2 Commits
0170505376
...
04ee6d1699
| Author | SHA1 | Date | |
|---|---|---|---|
| 04ee6d1699 | |||
| 65c8f56e20 |
@@ -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)} руб.'),
|
||||
],
|
||||
)
|
||||
],
|
||||
|
||||
@@ -139,34 +139,28 @@ class _ExamplePageState extends State<ExamplePage> {
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('GymLink Example App'),
|
||||
title: const Text('GymLink Example App Gym 1'),
|
||||
),
|
||||
resizeToAvoidBottomInset: false,
|
||||
drawer: getDrawer(context),
|
||||
body: Column(
|
||||
body: const Column(
|
||||
children: [
|
||||
const Text('test'),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.abc),
|
||||
onPressed: () {
|
||||
context.read<GymLinkProvider>().onTokenReceived('token123');
|
||||
},
|
||||
),
|
||||
const Expanded(
|
||||
Text('test'),
|
||||
Expanded(
|
||||
child: MyApp(),
|
||||
),
|
||||
const SizedBox(
|
||||
SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
const Text('Bottom text')
|
||||
Text('Bottom text')
|
||||
],
|
||||
),
|
||||
floatingActionButton: IconButton(
|
||||
icon: const Icon(Icons.search),
|
||||
onPressed: () {
|
||||
context
|
||||
.read<GymLinkProvider>()
|
||||
.changeTheme(Random().nextInt(0xffffff + 1));
|
||||
context.read<GymLinkProvider>().changeTheme(
|
||||
Random().nextInt(0xffffff + 1),
|
||||
blackTheme: Random().nextBool());
|
||||
},
|
||||
),
|
||||
);
|
||||
@@ -209,6 +203,7 @@ class _ExampleClub2PageState extends State<ExampleClub2Page> {
|
||||
|
||||
Future<void> _setToken() async {
|
||||
final token = await getToken('a8622a61-3142-487e-8db8-b6aebd4f04aa', '123');
|
||||
context.read<GymLinkProvider>().changeTheme(0xFFAABCAB);
|
||||
if (token != '') {
|
||||
context.read<GymLinkProvider>().onTokenReceived(token);
|
||||
} else {
|
||||
@@ -220,34 +215,26 @@ class _ExampleClub2PageState extends State<ExampleClub2Page> {
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('GymLink Example App'),
|
||||
title: const Text('GymLink Example App Gym2'),
|
||||
),
|
||||
resizeToAvoidBottomInset: false,
|
||||
drawer: getDrawer(context),
|
||||
body: Column(
|
||||
body: const Column(
|
||||
children: [
|
||||
const Text('test'),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.abc),
|
||||
onPressed: () {
|
||||
context.read<GymLinkProvider>().onTokenReceived('token123');
|
||||
},
|
||||
),
|
||||
const Expanded(
|
||||
Text('test'),
|
||||
Expanded(
|
||||
child: MyApp(),
|
||||
),
|
||||
const SizedBox(
|
||||
SizedBox(
|
||||
height: 20,
|
||||
),
|
||||
const Text('Bottom text')
|
||||
Text('Bottom text')
|
||||
],
|
||||
),
|
||||
floatingActionButton: IconButton(
|
||||
icon: const Icon(Icons.search),
|
||||
onPressed: () {
|
||||
context
|
||||
.read<GymLinkProvider>()
|
||||
.changeTheme(Random().nextInt(0xffffff + 1));
|
||||
// context.read<GymLinkProvider>().changeTheme(0xFFAABCAB);
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
@@ -280,7 +280,7 @@ class _BasketPageState extends State<BasketPage> {
|
||||
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<BasketPage> {
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
'Итого: $totalPrice руб.',
|
||||
'Итого: ${totalPrice.toStringAsFixed(2)} руб.',
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () => Navigator.of(context).push(
|
||||
|
||||
@@ -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<DetailPage> {
|
||||
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<DetailPage> {
|
||||
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<DetailPage> {
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
'Стоимость ${item!.price}руб.',
|
||||
'Стоимость ${item!.price.toStringAsFixed(2)}руб.',
|
||||
style:
|
||||
Theme.of(context).textTheme.bodyLarge,
|
||||
),
|
||||
|
||||
@@ -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<MainPage> {
|
||||
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<MainPage> {
|
||||
.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(
|
||||
|
||||
@@ -61,6 +61,7 @@ class _OrderConfirmationPageState extends State<OrderConfirmationPage> {
|
||||
List<GymItem> cartItems = [];
|
||||
double totalPrice = 0;
|
||||
List<GymItem> gymCart = [];
|
||||
bool isAgree = false;
|
||||
bool _isLoading = true;
|
||||
|
||||
@override
|
||||
@@ -107,6 +108,7 @@ class _OrderConfirmationPageState extends State<OrderConfirmationPage> {
|
||||
: 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<OrderConfirmationPage> {
|
||||
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<OrderConfirmationPage> {
|
||||
),
|
||||
),
|
||||
),
|
||||
CheckboxListTile(
|
||||
title: const Text('Согласен с обаботкой персональных данных'),
|
||||
value: isAgree,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
isAgree = value!;
|
||||
});
|
||||
},
|
||||
),
|
||||
ElevatedButton(
|
||||
onPressed: () async {
|
||||
_goToPage();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
9
lib/tools/text.dart
Normal file
9
lib/tools/text.dart
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user