簡體   English   中英

Flutter 我一直變壞 State:沒有元素。 當我試圖從上一個屏幕獲取我的用戶 ID 時

[英]Flutter i keep getting Bad State: No element. when im trying to get my userId from previous screen

當我嘗試從以前的布局中獲取數據並將其用於我的提供商時,我不斷收到錯誤消息

這是我的 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 但這段代碼一直給我一個錯誤的 state L 沒有元素

final seller = sellerProvider.getById(userId);

錯誤消息意味着您的代碼( firstWhere函數)找不到任何具有所提供 ID 的賣家。 仔細檢查 Firebase 中是否存在這樣的賣家。我還建議在您的應用程序中可能發生這種情況時進行處理。

還有一些方法可以幫助您,例如firstWhereOrNull而不是firstWhere

暫無
暫無

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

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