[英]How to use get_it for Provider.of<ExampleProvider>(context)?
我是 flutter 的新手,我正在嘗試將 get_it package 用於 DI。 我想了解如何使用 get_it 替換對 Inherited Widget 的依賴。 我的代碼如下所示:
我有一個定位器文件,用於初始化定位器實例及其設置。 定位器.dart 文件:
final locator = GetIt.instance;
void setupLocator() {
locator.registerLazySingleton<ExampleProvider>(() => ExampleProvider());
}
example_provider.dart:
class ExampleProvider with ChangeNotifier {
bool _value = false;
bool get value => _value;
set setValue(bool newValue) {
_value = newValue;
notifyListeners();
}
}
這是主頁,其中向子小部件提供帶有 ExampleProvider 的 ChangeNotifierProvider。
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),
),
);
}
}
這是我想使用定位器而不是Provider.of<ExampleProvider>(context)
的 ExampleWidget
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;
},
);
}
}
所以,我想為行final _exampleProvider = Provider.of<ExampleProvider>(context);
使用定位器在ExampleWidget
中。 我怎樣才能做到這一點? 它不是這樣工作的: final _exampleProvider = locator.get<ExampleProvider>();
嘗試這個
final _exampleProvider = locator.get<ExampleProvider>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.