簡體   English   中英

如何使用 flutter 中的提供程序將數據從一個 model 傳遞到另一個 model

[英]How to pass data from one model to another model using provider in flutter

您好,我正在嘗試將身份驗證令牌從我的身份驗證 model 傳遞到產品 model。我嘗試了以下代碼。

授權 Model 供應商

String get token {
    if (_expiryDate != null &&
        _expiryDate!.isAfter(DateTime.now()) &&
        _token != '') {
      return _token!;
    }
    return '';
  }

產品 Model 供應商

String? authToken;
  void update(authToken, items) {
    _items = items;
    authToken = authToken;
    print(authToken);
    notifyListeners();
  }

Future<void> fetchAndSetProducts() async {
    final url = Uri.parse(
        'https://flutter-app-848b9-default-rtdb.firebaseio.com/products.json?auth=$authToken');

    try {
      final response = await http.get(url);
      final extractedData = json.decode(response.body) as Map<String, dynamic>;
      final List<Product> loadedProducts = [];
      extractedData.forEach((prodId, prodData) {
        loadedProducts.add(Product(
          id: prodId,
          title: prodData['title'],
          description: prodData['description'],
          price: prodData['price'],
          imageUrl: prodData['imageUrl'],
          isFavorite: prodData['isFavorite'],
        ));
      });
      _items = loadedProducts;
      notifyListeners();
    } catch (error) {
      rethrow;
    }

主.dart文件

ChangeNotifierProxyProvider<Auth, Products>(
    create: (ctx) => Products(),
    update: (ctx, auth, previousProducts) => previousProducts!
    ..update(auth.token,
    previousProducts.items == null ? [] : previousProducts.items),
  ),

構建小部件后,我能夠打印出身份驗證令牌,但我無法將其傳遞給 API 參數。 我是 Flutter 和 Dart 的新人。

如果您使用的是 flutter v2,請嘗試以下操作:

授權 Model 供應商

 String? get token {
    if (_expiryDate != null &&
        _expiryDate!.isAfter(DateTime.now()) &&
        _token != null) {
      return _token;
    }
    return null;
  }

主要.dart

...
 @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider.value(
          value: Auth(),
        ),
        ChangeNotifierProxyProvider<Auth, Products>(
          create: (ctx) => Products('', '', []),
          update: (ctx, auth, previousProducts) =>
              Products(auth.token, auth.userId, previousProducts?.items ?? []),
        ),
        ChangeNotifierProvider(
          create: (ctx) => Cart(),
        ),
        ChangeNotifierProxyProvider<Auth, Orders>(
          create: (ctx) => Orders('', '', []),
          update: (ctx, auth, previousOrders) =>
              Orders(auth.token, auth.userId, previousOrders?.orders ?? []),
        )
      ],
      child: Consumer<Auth>(
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM