简体   繁体   English

如何将 get_it 用于 Provider.of<exampleprovider> (语境)?</exampleprovider>

[英]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.

相关问题 Flutter 如何使用提供程序与 get_it package - Flutter How to Use Provider with get_it package 如何在Flutter中的单例内部使用Provider.of(...)? - How to use Provider.of(…) inside a singleton in Flutter? Flutter:尝试将 BlocProvider 与 get_it 和 auto_route package 结合使用,但上下文找不到提供程序 - Flutter: Try to use BlocProvider with get_it and auto_route package but context don't find provider 我如何获得 Provider.of 的 memberId - How I can get memberId for Provider.of 无法使用提供者和获取数据:尝试调用 Provider.of<dynamic></dynamic> - Fail to use Provider and Get Data: Tried to call Provider.of<dynamic> 如何对访问 Provider.of(context) 的小部件进行 Flutter 测试 - How to do a Flutter Test for a widget that accesses Provider.of(context) Provider.of<>(context) 如何监听 object 的更新? - How does Provider.of<>(context) listen to updates to an object? 如何调用ThemeService themeService = Provider.of(context); 在脚手架的初始状态? - How to call ThemeService themeService = Provider.of(context); in the initial state of a scaffold? 提供者与 Get_it - Provider vs. Get_it 如何使用 class Provider.of 获得 Futur function 调用的返回值? - How to get the return of Futur function call with class Provider.of?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM