我有一个应用程序,使用可观察对象和主题对RxDart进行了一些测试。所以我编写这段代码:

class CompanyList extends StatefulWidget {
  const CompanyList({Key key}) : super(key: key);
  @override
  State<StatefulWidget> createState() => new CompanyListState();
}

class CompanyListState extends State<CompanyList> {
  CompanyController companyController = new CompanyController();
  List<dynamic> companyList = [];

  @override
  void initState() {
    super.initState();
    getActiveCompanys();
    companyController.loadMoreData$.listen((value) {
      print(value);
    });
  }

  @override
  void dispose() {
    super.dispose();
  }

  getActiveCompanys() async {
    companyController.getActiveCompanys().then((value) {
      for (var i = 0; i < 10; i++) {
        setState(() {
          companyList.add(value[i]);
        });
      }
    }).catchError((_) {
      print('ENTROU NO ERRO');
    });
  }

  getCompanyData(company) {
    Navigator.push(
      context,
      PageTransition(
        type: PageTransitionType.leftToRight,
        child: CompanyScreen(
          company: company,
        ),
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    final double screenHeight = MediaQuery.of(context).size.height;
    final double screenWidth = MediaQuery.of(context).size.width;

...代码继续!

我想获取像这样的提供者数据CompanyController companyController = new Provider.of<CompanyController>(context, listen: false);我在哪里放置 CompanyController companyController = new CompanyController();

但是我没有上下文,我需要这个实例来使RxDart主题和可观察对象一起工作。

最佳答案

您需要对context的引用才能使用ProviderState对象有一个引用作为其类的字段,但是在调用initState()之前不应该使用此引用,因此只需在initState()和在这里创建您需要的一切:

initState() {
  super.initState();
  companyController = new Provider.of<CompanyController>(context, listen: false);

  // use companyController here.
...
}

另外,请记住将所有需要处置的对象都处置在dispose()上。

10-08 03:35