Add: CartProvider
This commit is contained in:
@@ -3,9 +3,11 @@ import 'package:gymlink_module_web/components/app_bar.dart';
|
||||
import 'package:gymlink_module_web/components/basket_item_card.dart';
|
||||
import 'package:gymlink_module_web/components/heading.dart';
|
||||
import 'package:gymlink_module_web/pages/order_confirmation.dart';
|
||||
import 'package:gymlink_module_web/providers/cart.dart';
|
||||
import 'package:gymlink_module_web/tools/prefs.dart';
|
||||
import 'package:gymlink_module_web/tools/routes.dart';
|
||||
import 'package:lazy_load_scrollview/lazy_load_scrollview.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
List<Map<String, dynamic>> cart = [
|
||||
{
|
||||
@@ -73,6 +75,10 @@ class _BasketPageState extends State<BasketPage> {
|
||||
});
|
||||
}
|
||||
|
||||
void _updateCart() {
|
||||
Provider.of<CartProvider>(context, listen: false).updateCartLength();
|
||||
}
|
||||
|
||||
void removeItem(String id) async {
|
||||
final item = cartItems.firstWhere((element) => element['id'] == id);
|
||||
bool toDelete = false;
|
||||
@@ -136,6 +142,9 @@ class _BasketPageState extends State<BasketPage> {
|
||||
setState(() {
|
||||
cartItems.removeWhere((element) => element['id'] == id);
|
||||
});
|
||||
if (mounted) {
|
||||
_updateCart();
|
||||
}
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
),
|
||||
@@ -173,6 +182,9 @@ class _BasketPageState extends State<BasketPage> {
|
||||
setState(() {
|
||||
cartItems = [];
|
||||
});
|
||||
if (mounted) {
|
||||
_updateCart();
|
||||
}
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
),
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gymlink_module_web/components/app_bar.dart';
|
||||
import 'package:gymlink_module_web/components/heading.dart';
|
||||
import 'package:gymlink_module_web/providers/cart.dart';
|
||||
import 'package:gymlink_module_web/tools/prefs.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
//TODO: Сделать получение инфы через объект
|
||||
class DetailPage extends StatefulWidget {
|
||||
@@ -67,6 +69,9 @@ class _DetailPageState extends State<DetailPage> {
|
||||
isInCart = true;
|
||||
quantity = 1;
|
||||
});
|
||||
if (mounted) {
|
||||
context.read<CartProvider>().updateCartLength();
|
||||
}
|
||||
},
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Theme.of(context).primaryColor,
|
||||
@@ -93,6 +98,9 @@ class _DetailPageState extends State<DetailPage> {
|
||||
quantity = 0;
|
||||
}
|
||||
});
|
||||
if (mounted) {
|
||||
context.read<CartProvider>().updateCartLength();
|
||||
}
|
||||
},
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
|
||||
@@ -6,10 +6,12 @@ import 'package:gymlink_module_web/components/item_card.dart';
|
||||
import 'package:gymlink_module_web/pages/basket.dart';
|
||||
import 'package:gymlink_module_web/pages/detail.dart';
|
||||
import 'package:gymlink_module_web/pages/order_history.dart';
|
||||
import 'package:gymlink_module_web/providers/cart.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:lazy_load_scrollview/lazy_load_scrollview.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
const List<Map<String, String>> testData = [
|
||||
@@ -105,6 +107,7 @@ class _MainPageState extends State<MainPage> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final cartL = context.watch<CartProvider>().cartLength;
|
||||
return Scaffold(
|
||||
appBar: widget.isLoading ? null : const GymLinkAppBar(),
|
||||
body: widget.isLoading
|
||||
@@ -233,14 +236,16 @@ class _MainPageState extends State<MainPage> {
|
||||
),
|
||||
],
|
||||
),
|
||||
floatingActionButton: SizedBox(
|
||||
floatingActionButton: !widget.isLoading
|
||||
? SizedBox(
|
||||
height: 80,
|
||||
width: 80,
|
||||
child: FittedBox(
|
||||
child: Stack(
|
||||
children: [
|
||||
FloatingActionButton(
|
||||
onPressed: () => Navigator.of(context).push(CustomPageRoute(
|
||||
onPressed: () =>
|
||||
Navigator.of(context).push(CustomPageRoute(
|
||||
builder: (context) => const BasketPage(),
|
||||
)),
|
||||
backgroundColor: Colors.transparent,
|
||||
@@ -251,11 +256,7 @@ class _MainPageState extends State<MainPage> {
|
||||
foregroundColor: Colors.white,
|
||||
child: const Icon(Icons.shopping_cart_outlined)),
|
||||
),
|
||||
/**
|
||||
* Загадочная штука, надо переделать
|
||||
* TODO: По идее надо через провайдер сделать, но не пойму как это сделать
|
||||
*/
|
||||
cartLength > 0
|
||||
cartL > 0
|
||||
? Positioned(
|
||||
right: -3,
|
||||
bottom: 0,
|
||||
@@ -265,7 +266,7 @@ class _MainPageState extends State<MainPage> {
|
||||
width: 20,
|
||||
child: Center(
|
||||
child: Text(
|
||||
cartLength.toString(),
|
||||
cartL.toString(),
|
||||
style: const TextStyle(color: Colors.white),
|
||||
),
|
||||
),
|
||||
@@ -276,7 +277,8 @@ class _MainPageState extends State<MainPage> {
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
: null,
|
||||
floatingActionButtonLocation: FloatingActionButtonLocation.startFloat,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gymlink_module_web/main_mobile.dart';
|
||||
import 'package:gymlink_module_web/pages/main.dart';
|
||||
import 'package:gymlink_module_web/providers/cart.dart';
|
||||
import 'package:gymlink_module_web/providers/main.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
@@ -8,12 +9,19 @@ class MyAppStateMobile extends State<MyApp> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Consumer<GymLinkProvider>(
|
||||
builder: (context, provider, __) => MaterialApp(
|
||||
builder: (context, provider, __) {
|
||||
final theme = provider.theme;
|
||||
final isLoading = provider.isLoading;
|
||||
return ChangeNotifierProvider(
|
||||
create: (_) => CartProvider(),
|
||||
builder: (context, __) => MaterialApp(
|
||||
title: 'GymLink Module',
|
||||
theme: provider.theme,
|
||||
theme: theme,
|
||||
debugShowCheckedModeBanner: false,
|
||||
home: MainPage(isLoading: provider.isLoading),
|
||||
home: MainPage(isLoading: isLoading),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,9 @@ import 'dart:js_interop_unsafe' as js_util;
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gymlink_module_web/main.dart';
|
||||
import 'package:gymlink_module_web/pages/main.dart';
|
||||
import 'package:gymlink_module_web/providers/cart.dart';
|
||||
import 'package:gymlink_module_web/theme.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
@js.JSExport()
|
||||
class MyAppStateWeb extends State<MyApp> {
|
||||
@@ -30,11 +32,14 @@ class MyAppStateWeb extends State<MyApp> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
return ChangeNotifierProvider(
|
||||
create: (_) => CartProvider(),
|
||||
child: MaterialApp(
|
||||
title: 'GymLink Module',
|
||||
theme: theme,
|
||||
debugShowCheckedModeBanner: false,
|
||||
home: MainPage(isLoading: _isLoading),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user