【问题标题】:How acess provider outside a Widget?如何访问一个Widget之外的provider?
【发布时间】:2020-05-24 03:29:51
【问题描述】:

我有一个应用程序,我使用可观察对象和主题对 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&lt;CompanyController&gt;(context, listen: false); 我把 CompanyController companyController = new CompanyController();

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

【问题讨论】:

    标签: flutter dart rxdart


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-18
      • 2022-10-14
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多