[英]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.