簡體   English   中英

如何將 get_it 用於 Provider.of<exampleprovider> (語境)?</exampleprovider>

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM