请帮我实现这个方法,我是 Flutter 的新手。
如何使用 Provider 来实现
(不仅 Provider 是可能的,对我来说最主要的是了解如何在实践中实现和应用)
当您单击“购买”按钮时(在本例中我只有一个),从列表中传输数据,仅“Orange”*(如果“Mandarin”-则数据“Mandarin”)*
同时,如果您单击“下订单”按钮,则会删除第一个屏幕中的数据。
List <String> Name = ['Апельсин', 'Мандарин', 'Помидор'];
List <int> Price = [70,60,80];
class MainApp extends StatelessWidget {
const MainApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
const MyHomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Main'),
),
body: ListView.builder(
itemCount: Name.length,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(left: 10, top: 50, bottom: 50),
child: Text(Name[index].toString()),
),
Row(children: [
Padding(
padding: EdgeInsets.only(left: 100, top: 50, bottom: 50),
child: Text(Price[index].toString()),
),
Padding(
padding: const EdgeInsets.only(left: 100),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(onPressed: (){Navigator.push(context,
CupertinoPageRoute(builder: (context) => const SalePage()));}, child: const
Text('Купить')),
],
),
)
]),
],
),
);
},
),
);
}
}
以下是您的错误以及为什么它不适合您:
Name
和Price
)而不是结构。下面是一个实际示例及其分析:
类
Product
代表了产品的本质。它有两个属性:name
——产品名称。price
- 价格。类
Store
是应用程序的主要状态存储。它是使用 mixin 实现的ChangeNotifier
,它允许小部件收到状态更改的通知。主要性能
Store
:_products
:有很多产品可供购买。_cart
:添加到“购物车”进行购买的所选产品。方法
Store
:products
:返回产品列表的 getter。cart
:返回购物车中当前产品的 getter。addToCart(Product product)
:将产品添加到购物车。removeFromCart(Product product)
: 清空垃圾箱。buy()
:从可用产品列表中删除产品,清空购物车。它是如何运作的
notifyListeners()
?该方法
notifyListeners()
通知所有订阅的小部件(通过Provider
)存储状态已更改。这允许您使用更新的数据自动重建界面。转帐
Store
方式Provider
:Store
要从应用程序中的任何位置访问,请使用provider
.环境
Provider
:在应用程序的根部(在 MainApp 中),Store 通过 ChangeNotifierProvider 传递:
现在任何子小部件都可以使用以下方式访问商店:
context.watch<Store>()
:读取状态并在更改时自动重建。context.read<Store>()
:读取状态而不订阅更改。顺便说一句,代码几乎已经准备好与购物车中的许多产品一起使用,因为这就是我最初完成此任务的方式。如果你想练习的话,就自己尝试一下吧!