如何将提供程序暴露在屏幕上。 (提供者仅公开在先前的屏幕上可用)

时间:2020-10-05 21:20:19

标签: flutter

我有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中的每个项目。 用户可以在ProductListView上访问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(),
        ),
      ),
    );
  }
}

0 个答案:

没有答案