我刚刚创建了一个电子商务应用程序,我希望每两周后删除订单页面中的商品 我刚刚创建了一个电子商务 flutter 应用程序,但我希望产品仅订购一次,两周后订单页面中的项目应被删除。下面是我的代码。所以我的计划是,一旦一个项目被添加到订单屏幕,它应该在两周后被删除。我不希望有太多订单,因此从添加之日起,每件商品都会开始倒计时,直至被删除
orders_providers.dart
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import '../model/orders_model.dart';
class OrdersProvider with ChangeNotifier {
static List<OrderModel> _orders = [];
List<OrderModel> get getOrders {
return _orders;
}
void clearLocalOrders() {
_orders.clear();
notifyListeners();
}
Future<void> fetchOrders() async {
User? user = FirebaseAuth.instance.currentUser;
DateTime.now().subtract(Duration(seconds: 5));
await FirebaseFirestore.instance
.collection('orders')
.where("userId", isEqualTo: user!.uid)
.get()
.then((QuerySnapshot ordersSnapshot) {
_orders = [];
ordersSnapshot.docs.forEach((element) {
_orders.insert(
0,
OrderModel(
orderId: element.get('orderId'),
userId: element.get('userId'),
productId: element.get('productId'),
userName: element.get('userName'),
price: element.get('price').toString(),
imageUrl: element.get('imageUrl'),
quantity: element.get('quantity').toString(),
orderDate: element.get('orderDate'),
),
);
});
});
notifyListeners();
}
}
orders_widget.dart
import 'package:fancy_shimmer_image/fancy_shimmer_image.dart';
import 'package:flutter/material.dart';
import 'package:new_customers_app/screens/orders/order_done.dart';
import 'package:provider/provider.dart';
import '../../inner_screens/product_details.dart';
import '../../model/orders_model.dart';
import '../../providers/products_provider.dart';
import '../../services/global_methods.dart';
import '../../services/utils.dart';
import '../../widgets/text_widget.dart';
class OrderWidget extends StatefulWidget {
const OrderWidget({Key? key}) : super(key: key);
@override
State<OrderWidget> createState() => _OrderWidgetState();
}
class _OrderWidgetState extends State<OrderWidget> {
late String orderDateToShow;
@override
void didChangeDependencies() {
final ordersModel = Provider.of<OrderModel>(context);
var orderDate = ordersModel.orderDate.toDate();
orderDateToShow = '${orderDate.day}/${orderDate.month}/${orderDate.year}';
super.didChangeDependencies();
}
@override
Widget build(BuildContext context) {
final ordersModel = Provider.of\<OrderModel\>(context);
final Color color = Utils(context).color;
Size size = Utils(context).getScreenSize;
final productProvider = Provider.of\<ProductsProvider\>(context);
final getCurrProduct = productProvider.findProdById(ordersModel.productId);
return ListTile(
subtitle:
Text('Paid: \$${double.parse(ordersModel.price).toStringAsFixed(2)}'),
onTap: () {
Navigator.pushNamed(context, OrderDone.routeName,
arguments: ordersModel.productId);
},
leading: FancyShimmerImage(
width: size.width * 0.2,
imageUrl: getCurrProduct.imageUrl,
boxFit: BoxFit.fill,
),
title: TextWidget(
text: '${getCurrProduct.title} x${ordersModel.quantity}',
color: color,
textSize: 18),
trailing: TextWidget(text: orderDateToShow, color: color, textSize: 18),
);
}
}
order_screen.dart
import 'package:flutter/material.dart';
import 'package:flutter_iconly/flutter_iconly.dart';
import 'package:provider/provider.dart';
import '../../../providers/orders_provider.dart';
import '../../../services/utils.dart';
import '../../../widgets/empty_screen.dart';
import '../../../widgets/text_widget.dart';
import 'orders_widget.dart';
class OrdersScreen extends StatefulWidget {
static const routeName = '/OrderScreen';
const OrdersScreen({Key? key}) : super(key: key);
@override
State<OrdersScreen> createState() => _OrdersScreenState();
}
class _OrdersScreenState extends State<OrdersScreen> {
@override
Widget build(BuildContext context) {
final Color color = Utils(context).color;
Size size = Utils(context).getScreenSize;
final ordersProvider = Provider.of\<OrdersProvider\>(context);
final ordersList = ordersProvider.getOrders;
return FutureBuilder(
future: ordersProvider.fetchOrders(),
builder: (context, snapshot) {
return ordersList.isEmpty
? const EmptyScreen(
title: 'You did not place any order yet',
subtitle: 'order something and make me happy :)',
buttonText: 'Shop now',
imagePath: 'assets/images/box.png',
)
: Scaffold(
appBar: AppBar(
leading: InkWell(
borderRadius: BorderRadius.circular(12),
onTap: () {
Navigator.pop(context);
},
child: Icon(
IconlyLight.arrowLeft2,
color: color,
),
),
elevation: 0,
centerTitle: false,
title: TextWidget(
text: 'My Courses (${ordersList.length})',
color: color,
textSize: 24.0,
isTitle: true,
),
backgroundColor: Theme.of(context)
.scaffoldBackgroundColor
.withOpacity(0.9),
),
body: ListView.separated(
itemCount: ordersList.length,
itemBuilder: (ctx, index) {
return GestureDetector(
onTap: () {
Navigator.of(context).pop();
},
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 2, vertical: 6),
child: ChangeNotifierProvider.value(
value: ordersList\[index\],
child: const OrderWidget(),
),
),
);
},
separatorBuilder: (BuildContext context, int index) {
return Divider(
color: color,
thickness: 1,
);
},
));
});
}
}
最简单的方法是在集合上设置生存时间策略,在每个文档的特定字段中指定的日期/时间之后删除文档。然后在您的代码中添加一个包含未来两周日期/时间的附加字段,该策略将自动删除该日期/时间的文档。