标签: dart-null-safety

Dart null 安全条件语句?

所以我有一个类Cache,它有compare一个返回bool.

我有一个可为空的类的实例。

Cache? recent;
Run Code Online (Sandbox Code Playgroud)

recent我想在isnot nullcomparereturn时执行一段代码false

如果没有零安全性,我就会这样做

if(recent!=null && !recent.compare()){
  //code
}
Run Code Online (Sandbox Code Playgroud)

如何在启用空安全的情况下执行相同的操作?

当我尝试上面的零安全性时,我得到

无法无条件调用“compare”方法,因为接收者可能为“null”。尝试使调用有条件(使用“?。”)或向目标添加空检查(“!”)

当我尝试下面时

if(!recent?.compare()){
  //code
}
Run Code Online (Sandbox Code Playgroud)

它给了我

可为空的表达式不能用作条件。在将其用作条件之前,请尝试检查该值是否不为“null”。

dart dart-null-safety

5
推荐指数
1
解决办法
3847
查看次数

颤动测试中的非空变量

我大约一年前正在学习颤振,现在我休息后回来,但我遇到了一个问题,它可能很简单,但我不太理解它。

我正在关注 Flutter Clean Architecture 的教程,当我编写第一个测试时,我收到一条错误消息:“必须先分配不可为空的局部变量‘mockNumberTriviaRepository’,然后才能使用它。” 我不知道如何将其编写为正确的代码。

我的代码如下:

class MockNumberTriviaRepository extends Mock
    implements NumberTriviaRepository {}

void main() {
  GetConcreteNumberTrivia usecase;
  MockNumberTriviaRepository mockNumberTriviaRepository;

  setUp(() {
    MockNumberTriviaRepository mockNumberTriviaRepository = MockNumberTriviaRepository();
    usecase = GetConcreteNumberTrivia(mockNumberTriviaRepository);
  });

  final tNumber = 1;
  final tNumberTrivia = NumberTrivia(number: 1, text: 'test');
  test('schould get trivia for the number from the repository', () async {
    // arrange
    when(**mockNumberTriviaRepository**.getConcreteNumberTrivia(1)).thenAnswer((_) async => Right(tNumberTrivia));
    // act

    // assert
  });
}


Run Code Online (Sandbox Code Playgroud)

错误出现在测试函数中when方法之后** ** this 标志之间的部分

dart flutter flutter-test dart-null-safety

5
推荐指数
1
解决办法
1082
查看次数

Flutter:如何处理“可选参数的默认值必须是常量”

我有一个像这样的简单课程:

class Restaurant{
  final String id;
  final String name;
  List<Serving> servingList;

  Restaurant({
    required this.id,
    required this.name,
    this.servingList = [], // ERROR
  });
}
Run Code Online (Sandbox Code Playgroud)

默认情况下,我想要一个空列表servingList,并稍后将对象添加到该列表中。但我收到错误消息The default value of an optional parameter must be constant. 我需要做什么?

我感谢每一个帮助,谢谢!

constructor class dart flutter dart-null-safety

5
推荐指数
1
解决办法
8273
查看次数

无法从函数返回“Future&lt;bool&gt;”类型的值,因为它的返回类型为“Future&lt;void&gt;”

我有:

Future<bool> foo() async => true;
Run Code Online (Sandbox Code Playgroud)

这是允许的:

Future<void> bar()  {
  return foo(); // Works
}
Run Code Online (Sandbox Code Playgroud)

但这不是:

Future<void> baz() async {
  return foo(); // Error
}
Run Code Online (Sandbox Code Playgroud)

在两者中barbaz我都返回 a Future<bool>,但为什么第一个有效但第二个失败?


注意:这个问题不是关于如何让它工作,而是关于为什么一个有效而另一个无效。

dart dart-null-safety

5
推荐指数
1
解决办法
3678
查看次数

CameraUtils.java:154:警告:[弃用] CamcorderProfile 中的 get(int,int) 已弃用

  1. 我升级了旧项目并尝试将其迁移到零安全我收到此错误无法获得有关任何帮助的任何答案

在此输入图像描述

javascript dart flutter flutter-dependencies dart-null-safety

5
推荐指数
1
解决办法
5344
查看次数

*[严重]* 无法预编译构建脚本 .dart_tool/build/entrypoint/build.dart。这可能是由错误配置的构建器定义引起的

[信息] 预编译构建脚本...... [警告] ../../flutter/.pub-cache/hosted/pub.dartlang.org/gql_code_builder-0.2.0/lib/src/ast.dart: 618:12:错误:必须返回非空值,因为返回类型“表达式”不允许为空。

  • '表达式'来自'package:code_builder/src/specs/expression.dart' ('../../flutter/.pub-cache/hosted/pub.dartlang.org/code_builder-4.1.0/lib/src /specs/expression.dart')。表达式 _directiveLocation(DirectiveLocation location) { ^ [INFO] 预编译构建脚本...已完成,花费了 838 毫秒

[严重] 无法预编译构建脚本 .dart_tool/build/entrypoint/build.dart。这可能是由错误配置的构建器定义引起的。

dart dart-pub flutter dart-null-safety

5
推荐指数
1
解决办法
4825
查看次数

如何做出 null 安全断言以避免在 Flutter 中使用 null 检查 (!) 或条件 (?) 运算符?

当我在语句中使用变量时,Dart 编译器不明白该变量不能为 nullif (x != null)。它仍然需要使用条件?或空检查!运算符来访问变量的字段或方法之一。

这是一个例子:

String? string;

void test() {
  if (string != null) {
    print(string.length);
  }
}
Run Code Online (Sandbox Code Playgroud)

这会产生一个编译时错误并表示

无法无条件访问属性“length”,因为接收者可以为“null”。尝试使访问成为有条件的(使用“?.”)或向目标添加空检查(“!”)。

然而,接收者实际上不能为空,因为它是用if (string != null)块包裹的。string?.length使用或访问字段string!.length效果很好,但当我需要使用变量的不同字段或方法时,可能会感到困惑。

String? string;

void test() {
  if (string != null) {
    print(string.length);
    print(string.isNotEmpty);
    print(string.trim());
    print(string.contains('x'));
  }
}
Run Code Online (Sandbox Code Playgroud)

所有这些陈述都会引发相同的错误。我也尝试放置assert(string != null);,但编译器仍然不明白该字符串不为空。

举一个更复杂的例子;

User? user;

@override
Widget build(BuildContext context) {
  if (user == null) {
    return Text('No user available');
  } else { …
Run Code Online (Sandbox Code Playgroud)

dart flutter dart-null-safety

5
推荐指数
1
解决办法
1631
查看次数

Dart 空安全 - 如何禁用某些文件的空安全分析?

问题:

一些 pub 包还不支持空安全。

例如intl_translation无法解析具有空安全运算符的文件,并且如果找到任何符号(如 ?、! 等),则会抛出如下错误。

Invalid argument(s): Parsing errors in lib/localizations/MainLocalizations.dart
#0      MessageExtraction._parseCompilationUnit (package:intl_translation/extract_messages.dart:117:7)
#1      MessageExtraction.parseContent (package:intl_translation/extract_messages.dart:102:14)
#2      MessageExtraction.parseFile (package:intl_translation/extract_messages.dart:87:12)
#3      main (file:///.../flutter/.pub-cache/hosted/pub.dartlang.org/intl_translation-0.17.10+1/bin/extract_to_arb.dart:98:31)
#4      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:281:32)
#5      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
Run Code Online (Sandbox Code Playgroud)

然后它生成不使用空安全的 dart 文件,并在$ flutter run.

那么有没有办法至少为成功编译禁用警告或空安全?因为 $ flutter run --no-sound-null-safety没有帮助:(

感谢您的任何帮助!

dart flutter flutter-dependencies dart-null-safety

4
推荐指数
1
解决办法
2196
查看次数

从 Flutter 项目运行 android 项目,具有不健全的空安全

在完善的空安全到来后,仍然有依赖项还没有升级到空安全的项目,仍然可以--no-sound-null-safety通过 Flutter 命令使用flag运行。

但是现在我正在尝试通过android项目运行该应用程序。我尝试这样做的原因是为了让我调试原生 Flutter 插件。我android在 Android Studio 上打开文件夹,当我尝试运行该项目时,收到错误消息:

Error: Cannot run with sound null safety, because the following dependencies don't support null safety:
Run Code Online (Sandbox Code Playgroud)

如果我正在运行 Flutter 命令,我提到的标志将在这里工作。但是在android通过 Android Studio运行项目时如何设置这个标志?

flutter flutter-dependencies flutter-plugin dart-null-safety

4
推荐指数
1
解决办法
1014
查看次数

Flutter 错误:body 可能正常完成,导致返回 'null',但返回类型是潜在的不可为 null 的类型

我正在使用启用了空安全的新 dart 版本 <2.13.0-107.0.dev>。

有了这个任务列表:

  List<Task> tasks = [
    Task(name: 'find a way to live happy'),
    Task(name: 'Listen to music!!!'),
    Task(name: 'Live in the other world till ur power is off'),
  ];
Run Code Online (Sandbox Code Playgroud)

当我尝试在 ListView.builder 构造函数中使用它时:

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: tasks.length,
      itemBuilder: (context, index) {
         TaskTile(
          taskTitle: tasks[index].name,
          isChecked: tasks[index].isDone,
          checkboxCallback: (bool? checkboxState) {
            setState(() {

              tasks[index].toggleDone();
            });
          },
        );
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误:主体可能正常完成,导致返回“空”,但返回类型可能是不可为空的类型。

以及运行日志中的此错误:

错误:必须返回非空值,因为返回类型“Widget”不允许为空。

有关更多信息,Task 类定义如下:

class Task {
  String name;
  bool isDone;

  Task({this.name …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-listview dart-null-safety

4
推荐指数
2
解决办法
1万
查看次数