我有2个提供商const toDatePickerInsertion = (browser, pickerInputSelector) => ({
month,
day,
year,
}) => {
return browser
.click(pickerInputSelector)
.pause(500)
.keys(browser.Keys.LEFT_ARROW)
.pause(500)
.keys(browser.Keys.LEFT_ARROW)
.pause(500)
.keys(month)
.pause(500)
.keys(browser.Keys.RIGHT_ARROW)
.pause(500)
.keys(day)
.pause(500)
.keys(browser.Keys.RIGHT_ARROW)
.pause(500)
.keys(year);
};
和Product
。
3个屏幕和1个小部件,一个Products
列出所有带有小部件作为子元素的ProductsScreen
的产品,一个ListView.builder
显示一个产品的详细信息,以及一个{{1 }}编辑产品。
我将ProductDetailScreen
提供程序放在main上,并将ProductEditScreen
提供程序暴露给Products
中的每个项目。
用户可以在Product
和ListView
上访问ProductEditScreen
。
如果用户要在ProductsScreen
上进行编辑,编辑产品并保存,使用我现在拥有的代码,应用程序将返回到ProductDetailScreen
,并且所编辑的产品将显示正确的数据。
我很难弄清楚如何将ProductsScreen
提供者暴露给ProductsScreen
。我在这里也需要Product
提供者,因为如果用户去产品编辑和保存,应用程序又返回了,我需要显示正确的产品数据。
ProductDetailScreen
product
main.dart
...
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (ctx) => Products(),
),
],
child: MaterialApp(
title: 'My app',
theme: ThemeData(
primarySwatch: Colors.purple,
accentColor: Colors.deepOrange,
),
initialRoute: ProductsScreen.routeName,
routes: {
ProductsScreen.routeName: (ctx) => ProductsScreen(),
ProductDetailScreen.routeName: (ctx) => ProductDetailScreen(),
ProductEditScreen.routeName: (ctx) => ProductEditScreen(),
},
),
);
}
}
products_screen.dart
...
class ProductsScreen extends StatelessWidget {
static const routeName = '/products-screen';
@override
Widget build(BuildContext context) {
final products = Provider.of<Products>(context, listen: true);
return Scaffold(
appBar: AppBar(
title: Text('Products'),
),
body: ListView.builder(
itemCount: products.items.length,
itemBuilder: (ctx, idx) => ChangeNotifierProvider.value(
value: products.items[idx],
child: ProductItemWidget(),
),
),
);
}
}