颤动我不断收到不良状态:没有元素。当我尝试从上一个屏幕获取我的 userId 时
当我尝试从以前的布局获取数据并在我的提供商上使用它时,我不断收到错误
这是我的 seller_profile_screen.dart 文件
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../models & providers/seller.dart';
class SellerProfileScreen extends StatefulWidget {
static const routeName = '/seller-profile-screen';
const SellerProfileScreen({Key? key}) : super(key: key);
@override
State<SellerProfileScreen> createState() => _SellerProfileScreenState();
}
class _SellerProfileScreenState extends State<SellerProfileScreen> {
@override
Widget build(BuildContext context) {
final userId = ModalRoute.of(context)!.settings.arguments as String;
final sellerProvider = Provider.of<SellerProvider>(context);
final seller = sellerProvider.getById(userId);
return Scaffold();
}
}
这是我的卖家提供商文件
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class Seller with ChangeNotifier {
final double joinedDate;
final String id;
final String imageUrl;
final String city;
final String name;
Seller({
required this.joinedDate,
required this.id,
required this.imageUrl,
required this.city,
required this.name,
});
}
class SellerProvider with ChangeNotifier {
List<Seller> _sellers = [];
Future<void> fetchProducts() async {
await FirebaseFirestore.instance
.collection('users')
.get()
.then((QuerySnapshot sellerSnapshot) {
_sellers = [];
for (var element in sellerSnapshot.docs) {
_sellers.insert(
0,
Seller(
joinedDate: double.parse(element.get('joinedDate')),
id: element.get('id'),
imageUrl: element.get('imageUrl'),
city: element.get('location'),
name: element.get('name'),
),
);
}
});
}
List<Seller> sellers() => _sellers;
Seller getById(String userId) {
return _sellers.firstWhere((element) => element.id == userId);
}
List<Seller> getBySearch(String search) {
List<Seller> sellList = _sellers
.where((element) =>
element.name.toLowerCase().contains(search.toLowerCase()))
.toList();
notifyListeners();
return sellList;
}
}
这就是当我想在以前的文件中获取数据时我所做的
onTap: () {
Navigator.of(context).pushNamed(
SellerProfileScreen.routeName,
arguments: widget.product.userId);
},
那是在我的手势检测器中
,但是当我在 final seller = sellerProvider.getById(userId);
上删除或放置双斜杠时,错误消失了,但我无法从中获取数据,
这就是调试控制台所说的内容
════════ Exception caught by widgets library ═══════════════════════════════════
Bad state: No element
The relevant error-causing widget was
SellerProfileScreen
lib\main.dart:87
我已经很确定我从以前的布局中获取了我的 id,但是这段代码一直给我一个糟糕的状态 L no element
final seller = sellerProvider.getById(userId);
i keep getting error when im trying to get a data from previous layout and use it on my provider
this is my seller_profile_screen.dart file
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../models & providers/seller.dart';
class SellerProfileScreen extends StatefulWidget {
static const routeName = '/seller-profile-screen';
const SellerProfileScreen({Key? key}) : super(key: key);
@override
State<SellerProfileScreen> createState() => _SellerProfileScreenState();
}
class _SellerProfileScreenState extends State<SellerProfileScreen> {
@override
Widget build(BuildContext context) {
final userId = ModalRoute.of(context)!.settings.arguments as String;
final sellerProvider = Provider.of<SellerProvider>(context);
final seller = sellerProvider.getById(userId);
return Scaffold();
}
}
this is my seller provider file
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class Seller with ChangeNotifier {
final double joinedDate;
final String id;
final String imageUrl;
final String city;
final String name;
Seller({
required this.joinedDate,
required this.id,
required this.imageUrl,
required this.city,
required this.name,
});
}
class SellerProvider with ChangeNotifier {
List<Seller> _sellers = [];
Future<void> fetchProducts() async {
await FirebaseFirestore.instance
.collection('users')
.get()
.then((QuerySnapshot sellerSnapshot) {
_sellers = [];
for (var element in sellerSnapshot.docs) {
_sellers.insert(
0,
Seller(
joinedDate: double.parse(element.get('joinedDate')),
id: element.get('id'),
imageUrl: element.get('imageUrl'),
city: element.get('location'),
name: element.get('name'),
),
);
}
});
}
List<Seller> sellers() => _sellers;
Seller getById(String userId) {
return _sellers.firstWhere((element) => element.id == userId);
}
List<Seller> getBySearch(String search) {
List<Seller> sellList = _sellers
.where((element) =>
element.name.toLowerCase().contains(search.toLowerCase()))
.toList();
notifyListeners();
return sellList;
}
}
and this is what i did when i want to get my data in my previous file
onTap: () {
Navigator.of(context).pushNamed(
SellerProfileScreen.routeName,
arguments: widget.product.userId);
},
that was in my gesturedetector
but when i remove or put double slash on my final seller = sellerProvider.getById(userId);
error gone but i cant get my data from it
this is what is the debug console say
════════ Exception caught by widgets library ═══════════════════════════════════
Bad state: No element
The relevant error-causing widget was
SellerProfileScreen
lib\main.dart:87
and i already pretty sure that i get my id from previous layout but this code keep give me a bad state L no element
final seller = sellerProvider.getById(userId);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
该错误消息意味着您的代码(
firstWhere
函数)无法找到具有所提供 ID 的任何卖家。仔细检查 Firebase 中是否存在这样的卖家。我还建议在您的应用程序中可能发生这种情况时处理此问题。还有一些方法可以帮助您,例如
firstWhereOrNull
而不是firstWhere
The error message means that your code (the
firstWhere
function) cannot find any Sellers with the provided ID. Double-check that such a seller exists in Firebase. I would also recommend handling this in cases where it could happen in your app.There are also some methods that could help you out, like
firstWhereOrNull
instead offirstWhere