Flutter - 如何测试本地化小部件?

2024-03-26

我读过这个问题的答案question https://stackoverflow.com/questions/52463714/how-to-test-localized-widgets-in-flutter,但这并没有帮助我理解在我的情况下该怎么做,也许也是因为这个问题有点老了。所以,我再次问这个问题。

我使用骨架模板创建了一个新的 flutter 项目:

flutter create skeleton -t skeleton

我更改文件sample_item_details_view.dart如下:

 Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(AppLocalizations.of(context)!.itemDetails),
      ),
      body: Center(
        child: Text(AppLocalizations.of(context)!.itemDetailsMoreInfo),
      ),
    );
  }

现在,我想为这个小部件编写一个小部件测试:

import 'package:skeleton/src/sample_feature/sample_item_details_view.dart';

void main() {
  group('Sample item details', () {
    testWidgets('should display appbar', (WidgetTester tester) async {
      await tester.pumpWidget(const SampleItemDetailsView());
    });
  });
}

此操作失败并出现以下错误,因为AppLocalizations.of(context) is NULL

The following _CastError was thrown building SampleItemDetailsView(dirty):
Null check operator used on a null value

为了测试我需要执行哪些步骤SampleItemDetailsView?


这是因为 AppLocalizations 是由 MaterialApp 小部件注入到上下文中的,在app.dart。您的测试上下文中没有 AppLocalizations。 一种可能的解决方案是创建一个小部件助手来注入这种依赖项,如下所示:

class LocalizationsInj extends StatelessWidget {
  final Widget child;
  const LocalizationsInj({Key? key, required this.child}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      localizationsDelegates: const [
        AppLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: const [
        Locale('en', ''),
      ],
      home: child,
    );
  }
}

您可能需要参数化这些值来自定义您的测试用例。然后,你像这样使用:

void main() {
  group('Sample item details', () {
    testWidgets('should display appbar', (WidgetTester tester) async {
      await tester.pumpWidget(const LocalizationsInj(child: SampleItemDetailsView()));
    });
  });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter - 如何测试本地化小部件? 的相关文章

随机推荐

  • ARM 汇编不能同时使用立即值和 ADDS/ADCS

    我目前正在尝试使用汇编来加速 Cortex M0 Freescale KL25Z 上的一些 C 函数 我遇到这个最小测试程序的问题 syntax unified cpu cortex m0 text global test code 16
  • 有没有办法在 Shiny 中构建时显示绘图,而不是等待所有绘图?

    我有一个闪亮的仪表板 里面有很多图 所有这些都需要几秒钟的时间来构建 一旦最后一个构建完成 它们就会全部显示 我希望每个图在完成后立即显示 我知道 R 是单线程的 但似乎必须有一种方法 将执行返回到显示代码 或类似的东西 这段代码演示了这个
  • tr1::function 可以吞掉返回值吗?

    boost 函数常见问题解答第 3 项 http www boost org doc libs 1 46 1 doc html function faq html具体解决了我感兴趣的场景 为什么有 void 的解决方法 回报 C 允许它们
  • 什么是 JavaScript 的服务器端渲染?

    一些 JavaScript 框架 例如 Dust js 声称它们还支持服务器端渲染 除了客户端渲染之外 有人可以解释这是如何工作的吗 我的理解是JS总是在浏览器运行时执行 JavaScript 可以使用以下系统在服务器上运行Node js
  • setInterval() 对性能有害吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Leaflet图层控制:选择图层组内的图层?

    我想要一个传单图层控件 我可以在其中选择一个基础图层 并使该基础图层本身成为一个图层组 我可以从中选择要显示的子图层 我正在考虑一种设置 在其中单击单选按钮来选择基础图层 图层组 然后在其下方我会看到一个复选框列表 用于显示其中的哪些图层
  • vb.net 复选框标签位置

    有没有办法将复选框放在 asp 复选框标签的右侧 默认情况下 此代码放置复选框 然后放置标签
  • java中静态变量的初始化

    静态变量在类加载时初始化 到底是什么意思 我在网上阅读了很多讨论 但仍然感到困惑 第 2 步是初始化步骤 对吗 那么第 1 步 加载类时 会发生什么 public class NewClass static int arr Step 1 N
  • 当未进行 4 字节对齐时,Monotouch 浮点指针会抛出 NullReferenceException

    我面临着一个我无法理解的问题 在使用 Monotouch 在 C 中使用不安全指针时 我在设备 ARM 上收到 NullReferenceException 但我无法解释原因 让我们看一些代码 var rand new Random var
  • 如何从 C++ 调用 Java 方法

    我正在使用 JNI 从 Java 调用我的 C 函数 C 函数的参数之一是jobject thiz 据我所知 所有 JNI 原生函数都有这个参数 该功能需要很长时间才能完成 我想向jobject thizJava 对象 以便我可以向用户显示
  • tensorflow.pad 是如何工作的?

    有tensorflow pad 的例子 t is 1 2 3 4 5 6 paddings is 1 1 2 2 rank of t is 2 tf pad t paddings CONSTANT gt 0 0 0 0 0 0 0 0 0
  • NPM 不安装任何模块:网络套接字挂起

    Salam 意思是你好 我在 ubuntu 12 04 上安装了最新版本的 node js 我没有使用任何代理 并且我的网络设置配置正确 并且自上次 NPM 正常工作以来一直保持完好 但现在 NPM 挂起任何模块的安装 并出现以下错误 na
  • 内部类放在哪里? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将javascript变量传递给php而不刷新页面

    我有一个 5x5 网格的 div 框 其中 25 个 当我将一个项目放入其中时 我使用 jQuery UI 进行注册 它将收到它所放入的盒子的标题和项目的名称 该部分起作用 我想将标题和名称传递给 PHP 而不刷新页面 因为这样项目将重置
  • TF51005: 查询引用了不存在的字段。该错误是由“[Custom.ReflectedWorkItemId]”引起的

    我尝试将 Azure DevOps 板从一个组织迁移到另一个组织 我使用这个工具 https github com nkdAgility azure devops migration tools https github com nkdAg
  • 如何在 Bootstrap 中将单个下拉菜单附加到正文

    我看过下拉菜单的文档作为组件 http getbootstrap com components dropdowns and 分别使用javascript http getbootstrap com javascript dropdowns
  • PerformSelectorOnMainThread 实现的底层细节:

    想知道是否有人知道或有指向讨论 Cocoa 的 performSelectorOnMainThread 方法的低级实现细节的良好文档 我最好的猜测 我认为可能非常接近 是它使用 mach 端口或它们之上的抽象来提供线程内通信 将选择器信息作
  • Android L 忽略形状作为可绘制背景

    我正在 Nexus 5 上测试 Android L Preview 我的应用程序出现问题 我有一些带有背景设置的 TextView android background drawable rounded textview 而 圆形文本视图
  • Bash 函数内间接变量赋值

    我有一个脚本 其中需要对用户输入进行多次评估 我正在研究的解决方案是将评估位放入一个函数中 并在每次需要评估输入时简单地调用该函数 问题是当我尝试更新时 1变量 指函数的第一个变量参数 我收到错误消息 VARIABLE 命令未找到 这是代码
  • Flutter - 如何测试本地化小部件?

    我读过这个问题的答案question https stackoverflow com questions 52463714 how to test localized widgets in flutter 但这并没有帮助我理解在我的情况下该