首页 > 解决方案 > 为什么 Provider.of 上的“上下文”有错误?

问题描述

我希望寻求您的帮助以解决语法错误。“上下文”中显示错误,如下所示。

但是,完全相同的代码在嵌入到另一个文件的类中时没有错误。

预先感谢您的帮助。

错误

从Firebase.dart 读取

Future readFromFirebase() async {
  Carpark thisCarpark;

  // await FirebaseFirestore.instance
  await FirebaseFirestore.instance
      .collection('carpark')
      .get()
      .then((QuerySnapshot snapshot) {

    snapshot.docs.forEach(
      (DocumentSnapshot cp) {
        thisCarpark = Carpark(
          cp.get('name'),
          cp.get('district'),
        );
        Provider.of<CarparksProvider>(context, listen: false)
            .addCarpark(thisCarpark);
      },
    );
  });
  var carparkList =
      Provider.of<CarparksProvider>(context, listen: false).carparks;
  return carparkList;
}

carparks_provider.dart

import 'package:flutter/material.dart';
import 'carpark.dart';

class CarparksProvider extends ChangeNotifier {
  List<Carpark> _carparks = [];

  List<Carpark> get carparks => _carparks;

  void addCarpark(Carpark carpark) {
    _carparks.add(carpark);
    notifyListeners();
  }
}

parkFee_screen.dart

import 'package:carpark_v012/services/carpark.dart';
....

class ParkingFeeScreen extends StatefulWidget {

  @override
  _ParkingFeeScreen createState() => _ParkingFeeScreen();
}

class _ParkingFeeScreen extends State<ParkingFeeScreen> {
  List<Carpark> carparkList = []; //List for storing carparks

  void initState() {
    super.initState();
  }

  Future readFromFirebase() async {
    Carpark thisCarpark;
    ......
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: .........
      body: FutureBuilder(
        future: readFromFirebase(context),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          print(snapshot.data);
.........


标签: flutter

解决方案


像这样传递BuildContext给这个方法

Future readFromFirebase(BuildContext context) async {

在调用此函数时,将上下文传递给那里。

它在你的情况下解决了吗?


推荐阅读