【问题标题】:Issue in Flutter while using ChangeNotifierProxyProvider in my project. [Link for my project attached]在我的项目中使用 ChangeNotifierProxyProvider 时出现 Flutter 问题。 [附上我的项目链接]
【发布时间】:2020-08-12 11:04:18
【问题描述】:

使用 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】:

    我在构造函数中使用了可选参数,这样我就不必在 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,
          ),
        ),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多