Widget外如何访问提供者?
How acess provider outside a Widget?
我有一个应用程序,我使用 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
对象有一个引用作为其 class 的字段,但是这个在调用 initState()
之前不应使用引用,因此只需在 initState()
中使用您需要的引用并在那里创建您需要的所有内容:
initState() {
super.initState();
companyController = new Provider.of<CompanyController>(context, listen: false);
// use companyController here.
...
}
此外,请记住在 dispose()
处理所有需要处理的对象。
我有一个应用程序,我使用 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
对象有一个引用作为其 class 的字段,但是这个在调用 initState()
之前不应使用引用,因此只需在 initState()
中使用您需要的引用并在那里创建您需要的所有内容:
initState() {
super.initState();
companyController = new Provider.of<CompanyController>(context, listen: false);
// use companyController here.
...
}
此外,请记住在 dispose()
处理所有需要处理的对象。