我有一个应用程序,使用可观察对象和主题对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
的引用才能使用Provider
,State
对象有一个引用作为其类的字段,但是在调用initState()
之前不应该使用此引用,因此只需在initState()
和在这里创建您需要的一切:
initState() {
super.initState();
companyController = new Provider.of<CompanyController>(context, listen: false);
// use companyController here.
...
}
另外,请记住将所有需要处置的对象都处置在
dispose()
上。