【问题标题】:Creating StreamProvider in flutter app needs correction在 Flutter 应用中创建 StreamProvider 需要更正
【发布时间】:2021-07-31 18:21:25
【问题描述】:

我正在学习 StreamProviders 和 ChangeNotifierProvider 以及如何在 Flutter 应用中使用它们。

我遇到的问题是当我在 main.dart 中创建 StreamProvider 时。我收到此错误 无法使用静态访问访问实例成员“getAgencyTrxn”。 (文档) 如 getAgencyTrxn() 下的红线所示。我一直在关注一个教程和一些帖子,但没有一个与我正在做的完全匹配。

如何解决这个错误?

这是我目前所拥有的:

main.dart

Widget build(BuildContext context) {
    Provider.debugCheckInvalidValueType = null;

    globals.newTrxn = true;

    return MultiProvider(
      providers: [
        ChangeNotifierProvider<TrxnProvider>(create: (context) => TrxnProvider()),

        StreamProvider<TrxnProvider>(
            create: (context) => TrxnProvider.getAgencyTrxn(),
            initialData: []),
      ],
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
        home: LoginScreen(),
      ),
    );
  }

trxn_provider.dart

class TrxnProvider extends ChangeNotifier {
  final firestoreService = FirestoreService();

  String? _clientFName;
  String? _clientLName;

  // Getters
  String? get clientFName => _clientFName;
  String? get clientLName => _clientLName;

  // Setters
  changeclientFName(String value) {
    _clientFName = value;
    notifyListeners();
  }

  changeclientLName(String value) {
    _clientLName = value;
    notifyListeners();
  }

  loadValues(QueryDocumentSnapshot trxns) {
    _clientFName = trxns['clientFName'];
    _clientLName = trxns['clientLName'];
  }

  getAgencyTrxn() {
    return firestoreService.getAgencyTrxns();
  }

  saveTrxn() {
    if (globals.newTrxn == true) {
      _trxnId = uuId.v4();
      globals.newTrxn = false;
    }

    var newTrxn = Trxns(
        clientFName: clientFName,
        clientLName: clientLName);

    firestoreService.saveTrxn(newTrxn);
  }

  deleteTrxn(String trxnId) {
    firestoreService.deleteTrxn(trxnId);
  }
}

firestore_service.dart

class FirestoreService {
  FirebaseFirestore _db = FirebaseFirestore.instance;

Stream<QuerySnapshot> getAgencyTrxns() async* {
    yield* FirebaseFirestore.instance
        .collection('agency').doc(globals.agencyId)
        .collection('trxns')
        .where('trxnStatus', isNotEqualTo: 'Closed')
        .snapshots();
  }
}

【问题讨论】:

    标签: flutter stream


    【解决方案1】:

    我找到了解决方案。我需要改变这个

    create: (context) => TrxnProvider.getAgencyTrxn()
    

    到这里

    create: (context) => TrxnProvider().getAgencyTrxn()
    

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 2020-12-03
      • 2023-03-07
      • 2020-05-16
      • 2021-12-14
      • 2020-05-01
      • 2021-10-20
      • 2021-03-19
      • 2021-05-31
      相关资源
      最近更新 更多