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