颤动我不断收到不良状态:没有元素。当我尝试从上一个屏幕获取我的 userId 时

发布于 2025-01-18 02:54:53 字数 3027 浏览 1 评论 0原文

当我尝试从以前的布局获取数据并在我的提供商上使用它时,我不断收到错误

这是我的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昔日梦未散 2025-01-25 02:54:53

该错误消息意味着您的代码(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 of firstWhere

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文