[英]How to use get_it for Provider.of<ExampleProvider>(context)?
I am new to flutter and I am trying to use get_it package for DI.我是 flutter 的新手,我正在尝试将 get_it package 用于 DI。 I want to understand how can I replace my dependance on the Inherited Widget with get_it.我想了解如何使用 get_it 替换对 Inherited Widget 的依赖。 My code looks like this:我的代码如下所示:
I have a locator file which initialises the locator instance and its setup.我有一个定位器文件,用于初始化定位器实例及其设置。 locator.dart file:定位器.dart 文件:
final locator = GetIt.instance;
void setupLocator() {
locator.registerLazySingleton<ExampleProvider>(() => ExampleProvider());
}
example_provider.dart: example_provider.dart:
class ExampleProvider with ChangeNotifier {
bool _value = false;
bool get value => _value;
set setValue(bool newValue) {
_value = newValue;
notifyListeners();
}
}
This is the HomePage where provide the ChangeNotifierProvider with ExampleProvider to the child widget.这是主页,其中向子小部件提供带有 ExampleProvider 的 ChangeNotifierProvider。
home_page.dart file: home_page.dart 文件:
class HomePage extends StatefulWidget {
final String title;
const HomePage({Key? key, required this.title}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final _exampleProvider = locator.get<ExampleProvider>();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
key: Key('issue_list_screen_column'),
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
ChangeNotifierProvider(
create: (context) => _exampleProvider,
child: ExampleWidget(
key: Key('example_widget'),
),
),
],
),
appBar: AppBar(
title: Text(widget.title),
),
);
}
}
This is the ExampleWidget where I want to use the locator instead of Provider.of<ExampleProvider>(context)
这是我想使用定位器而不是Provider.of<ExampleProvider>(context)
的 ExampleWidget
example_widget.dart file: example_widget.dart 文件:
class ExampleWidget extends StatefulWidget {
const ExampleWidget({
Key? key,
}) : super(key: key);
@override
_ExampleWidgetState createState() => _ExampleWidgetState();
}
class _ExampleWidgetState extends State<ExampleWidget> {
@override
Widget build(BuildContext context) {
// How do I use locator over here with context??
final _exampleProvider = Provider.of<ExampleProvider>(context);
return Switch(
value: _exampleProvider.value,
onChanged: (newValue) {
themeProvider.setValue = newValue;
},
);
}
}
So, I want to use locator for the line final _exampleProvider = Provider.of<ExampleProvider>(context);
所以,我想为行final _exampleProvider = Provider.of<ExampleProvider>(context);
使用定位器in ExampleWidget
.在ExampleWidget
中。 How can I do that?我怎样才能做到这一点? It does not work like this: final _exampleProvider = locator.get<ExampleProvider>();
它不是这样工作的: final _exampleProvider = locator.get<ExampleProvider>();
try this尝试这个
final _exampleProvider = locator.get<ExampleProvider>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.