我尝试对一个自己的小部件进行单元测试:
\n\ntestWidgets(\'MyWidget has a title and message\', (WidgetTester tester) async {\n var text = "abc";\n var label = "def";\n\n await tester.pumpWidget(LabeledTextWidget(\n text,\n label: label,\n ));\n\n final textFinder = find.text(text);\n final labelFinder = find.text(label);\n\n expect(textFinder , findsOneWidget);\n expect(labelFinder, findsOneWidget);\n});\nRun Code Online (Sandbox Code Playgroud)\n\n这是小部件代码:
\n\nclass LabeledTextWidget extends StatelessWidget {\n final String text;\n final String label;\n LabeledTextWidget(this.text, {this.label});\n\n @override\n Widget build(BuildContext context) {\n return Column(\n crossAxisAlignment: CrossAxisAlignment.stretch,\n children: <Widget>[\n Text(label,style: Theme.of(context).textTheme.caption,),\n Text(text),\n ],\n );\n }\nRun Code Online (Sandbox Code Playgroud)\n\n测试总是抛出异常:
\n\n...\nNo Directionality widget found.\nRichText widgets …Run Code Online (Sandbox Code Playgroud) 我在我的 flutter 项目中使用 get_it 进行依赖注入。现在我正在尝试使用可注入来完成此操作,以用注释替换我的手写依赖文件。
我有一个特殊情况,我有一个通用类,必须使用不同的 T 值注入 3 次。
class TestBloc<T> {
...
}
Run Code Online (Sandbox Code Playgroud)
这就是我的旧配置中的样子:
sl.registerFactory(() => TestBloc<One>(...);
sl.registerFactory(() => TestBloc<Two>(...);
sl.registerFactory(() => TestBloc<Three>(...);
Run Code Online (Sandbox Code Playgroud)
我如何注释该类才能使其正常工作?
当我添加@injectable时
@injectable
class TestBloc<T> {
...
}
Run Code Online (Sandbox Code Playgroud)
我明白了(当然):
gh.factory<_i34.TestBloc<dynamic>>(() =>_i34.TestBloc<dynamic>(...);
Run Code Online (Sandbox Code Playgroud)
如何注释才能得到这个?
gh.factory<_i34.TestBloc<One>>(() =>_i34.TestBloc<One>(...);
gh.factory<_i34.TestBloc<Two>>(() =>_i34.TestBloc<Two>(...);
gh.factory<_i34.TestBloc<Three>>(() =>_i34.TestBloc<Three>(...);
Run Code Online (Sandbox Code Playgroud)