在我的项目中使用ChangeNotifierProxyProvider时在Flutter中发出的问题。 [附上我项目的链接]

问题描述 投票:0回答:1

使用ChangeNotifierProxyProvider时我的应用无法正常工作。

链接到我的项目是:https://github.com/BH4R47k/Practice-Shopping-App.git我希望有人下载该项目并运行它以解决我的问题。

[在使用ChangeNotifierProxyProvider的main.dart文件中查看。我想知道我做错了什么(不仅在main.dart中,而且在完整的项目中,[在上面给出了链接]),如果有人解决了我的问题,我也将不胜感激。

而且我还将我的代码放在main.dart中

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import './screens/splash_screen.dart';
import './screens/cart_screen.dart';
import './screens/products_overview_screen.dart';
import './screens/product_detail_screen.dart';
import './providers/products.dart';
import './providers/cart.dart';
import './providers/orders.dart';
import './providers/auth.dart';
import './screens/orders_screen.dart';
import './screens/user_products_screen.dart';
import './screens/edit_product_screen.dart';
import './screens/auth_screen.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider.value(
          value: Auth(),
        ),
        ChangeNotifierProxyProvider<Auth, Products>(
          create: (context) => Products(
            Provider.of<Products>(context).authToken,
            Provider.of<Products>(context).userId,
            Provider.of<Products>(context).items,
          ),
          update: (context, auth, previousProducts) => Products(
            auth.token,
            auth.userId,
            previousProducts == null ? [] : previousProducts.items,
          ),
        ),
        ChangeNotifierProvider.value(
          value: Cart(),
        ),
        ChangeNotifierProxyProvider<Auth, Orders>(
          create: (context) => Orders(
            Provider.of<Orders>(context).authToken,
            Provider.of<Orders>(context).userId,
            Provider.of<Orders>(context).orders,
          ),
          update: (context, auth, previousOrders) => Orders(
            auth.token,
            auth.userId,
            previousOrders == null ? [] : previousOrders.orders,
          ),
        ),
      ],
      child: Consumer<Auth>(
        builder: (ctx, auth, _) => MaterialApp(
          title: 'MyShop',
          theme: ThemeData(
            primarySwatch: Colors.purple,
            accentColor: Colors.deepOrange,
            fontFamily: 'Lato',
          ),
          home: auth.isAuth
              ? ProductsOverviewScreen()
              : FutureBuilder(
                  future: auth.tryAutoLogin(),
                  builder: (ctx, authResultSnapshot) =>
                      authResultSnapshot.connectionState ==
                              ConnectionState.waiting
                          ? SplashScreen()
                          : AuthScreen(),
                ),
          routes: {
            ProductDetailScreen.routeName: (ctx) => ProductDetailScreen(),
            CartScreen.routeName: (ctx) => CartScreen(),
            OrdersScreen.routeName: (ctx) => OrdersScreen(),
            UserProductsScreen.routeName: (ctx) => UserProductsScreen(),
            EditProductScreen.routeName: (ctx) => EditProductScreen(),
          },
        ),
      ),
    );
  }
}

提前感谢。

firebase flutter dart firebase-authentication flutter-layout
1个回答
0
投票

我在构造函数中使用了Optional Parameters,因此我不必在main.dart文件中传递任何内容。

products.dart(带有可选参数)的代码块看起来像:

List<Product> _items;
String authToken = '';
String userId = '';

Products(this._items, [this.authToken, this.userId]);

同样,orders.dart的代码块已更改。

main.dart文件的代码块如下:

ChangeNotifierProxyProvider<Auth, Products>(
      create: (_) => Products([]),
      update: (ctx, auth, previousProducts) => Products(
        previousProducts == null ? [] : previousProducts.items,
        auth.token,
        auth.userId,
      ),
    ),
    ChangeNotifierProvider.value(
      value: Cart(),
    ),
    ChangeNotifierProxyProvider<Auth, Orders>(
      create: (_) => Orders([]),
      update: (ctx, auth, previousOrders) => Orders(
        previousOrders == null ? [] : previousOrders.orders,
        auth.token,
        auth.userId,
      ),
    ),
© www.soinside.com 2019 - 2024. All rights reserved.