小部件外如何访问提供商?

时间:2020-05-24 03:29:51

标签: flutter dart rxdart

我有一个应用程序,我使用可观察对象和主题对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主题和可观察对象一起工作。

1 个答案:

答案 0 :(得分:1)

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

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

  // use companyController here. 
... 
} 

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