I have an application that I making some tests with RxDart using observables and subjects. So I make this code:
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;
... the code goes on!
I want to get a provider data like this CompanyController companyController = new Provider.of<CompanyController>(context, listen: false);
Where I put CompanyController companyController = new CompanyController();
But I don't have a context and I need this instance to make the RxDart subject and observables to work together.
You need a reference to the context
in order to use the Provider
, the State
object has a reference as a field of its class, but this reference shouldn't be used before initState()
is called, so just use the reference you need inside initState()
and create everything you need there:
initState() {
super.initState();
companyController = new Provider.of<CompanyController>(context, listen: false);
// use companyController here.
...
}
Also, remember to dispose all objects that need to be disposed at dispose()
.