Untitled

 avatar
unknown
plain_text
12 days ago
6.7 kB
2
Indexable
// Kirana Store App with UPI and COD (Hindi-English Bilingual)

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isHindi = false;
  List<Map<String, dynamic>> cart = [];

  void toggleLanguage() {
    setState(() {
      isHindi = !isHindi;
    });
  }

  void addToCart(Map<String, dynamic> product) {
    setState(() {
      cart.add(product);
    });
  }

  void removeFromCart(int index) {
    setState(() {
      cart.removeAt(index);
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Kirana Store',
      home: Scaffold(
        appBar: AppBar(
          title: Text(isHindi ? 'किराना स्टोर' : 'Kirana Store'),
          actions: [
            IconButton(
              icon: Icon(Icons.language),
              onPressed: toggleLanguage,
            ),
            IconButton(
              icon: Icon(Icons.shopping_cart),
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => CartScreen(
                      cart: cart,
                      isHindi: isHindi,
                      removeFromCart: removeFromCart,
                    ),
                  ),
                );
              },
            ),
          ],
        ),
        body: ProductList(
          isHindi: isHindi,
          addToCart: addToCart,
        ),
      ),
    );
  }
}

class ProductList extends StatelessWidget {
  final bool isHindi;
  final Function(Map<String, dynamic>) addToCart;
  ProductList({required this.isHindi, required this.addToCart});

  final List<Map<String, dynamic>> products = [
    {'name_en': 'Rice', 'name_hi': 'चावल', 'price': 60},
    {'name_en': 'Wheat', 'name_hi': 'गेहूं', 'price': 40},
    {'name_en': 'Soap', 'name_hi': 'साबुन', 'price': 25},
  ];

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: products.length,
      itemBuilder: (context, index) {
        var product = products[index];
        return ListTile(
          title: Text(isHindi ? product['name_hi'] : product['name_en']),
          subtitle: Text('${isHindi ? "मूल्य" : "Price"}: ₹${product['price']}'),
          trailing: ElevatedButton(
            child: Text(isHindi ? 'जोड़ें' : 'Add'),
            onPressed: () => addToCart(product),
          ),
        );
      },
    );
  }
}

class CartScreen extends StatefulWidget {
  final List<Map<String, dynamic>> cart;
  final bool isHindi;
  final Function(int) removeFromCart;

  CartScreen({required this.cart, required this.isHindi, required this.removeFromCart});

  @override
  _CartScreenState createState() => _CartScreenState();
}

class _CartScreenState extends State<CartScreen> {
  String selectedPayment = 'COD';

  Future<void> saveOrder(List<Map<String, dynamic>> cart) async {
    final prefs = await SharedPreferences.getInstance();
    String encodedCart = jsonEncode(cart);
    await prefs.setString('last_order', encodedCart);
  }

  @override
  Widget build(BuildContext context) {
    double total = widget.cart.fold(0, (sum, item) => sum + item['price']);

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.isHindi ? 'आपकी टोकरी' : 'Your Cart'),
      ),
      body: Column(
        children: [
          Expanded(
            child: ListView.builder(
              itemCount: widget.cart.length,
              itemBuilder: (context, index) {
                var item = widget.cart[index];
                return ListTile(
                  title: Text(widget.isHindi ? item['name_hi'] : item['name_en']),
                  subtitle: Text('${widget.isHindi ? "मूल्य" : "Price"}: ₹${item['price']}'),
                  trailing: IconButton(
                    icon: Icon(Icons.delete),
                    onPressed: () => widget.removeFromCart(index),
                  ),
                );
              },
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(
                  '${widget.isHindi ? "कुल राशि" : "Total Amount"}: ₹$total',
                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
                ),
                SizedBox(height: 10),
                DropdownButton<String>(
                  value: selectedPayment,
                  items: [
                    DropdownMenuItem(child: Text(widget.isHindi ? 'यूपीआई' : 'UPI'), value: 'UPI'),
                    DropdownMenuItem(child: Text(widget.isHindi ? 'कैश ऑन डिलीवरी' : 'Cash on Delivery'), value: 'COD'),
                  ],
                  onChanged: (value) {
                    setState(() {
                      selectedPayment = value!;
                    });
                  },
                ),
                SizedBox(height: 10),
                ElevatedButton(
                  onPressed: () async {
                    await saveOrder(widget.cart);
                    String message = selectedPayment == 'COD'
                        ? (widget.isHindi ? 'आपने COD चुना है। ऑर्डर सफल।' : 'You selected COD. Order successful.')
                        : (widget.isHindi ? 'आपने यूपीआई चुना है। कृपया भुगतान पूरा करें।' : 'You selected UPI. Please complete the payment.');

                    showDialog(
                      context: context,
                      builder: (context) => AlertDialog(
                        title: Text(widget.isHindi ? 'ऑर्डर विवरण' : 'Order Details'),
                        content: Text(message),
                        actions: [
                          TextButton(
                            onPressed: () => Navigator.pop(context),
                            child: Text('OK'),
                          ),
                        ],
                      ),
                    );
                  },
                  child: Text(widget.isHindi ? 'ऑर्डर करें' : 'Place Order'),
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
Editor is loading...
Leave a Comment