标签: dart-null-safety

错误:默认情况下,库不能选择退出空安全,当使用声音空安全时

为空安全升级 Flutter 包时,我在运行时遇到此错误flutter test

Error: A library can't opt out of null safety by default, when using sound null safety.
// @dart = 2.8
^^^^^^^^^^^^^^
Failed to load "/Users/xxxxx/test/text_test.dart":
  Compilation failed
Run Code Online (Sandbox Code Playgroud)

答案就在那里,但我仍然困惑了一段时间,所以我在下面添加了我的答案。

dart flutter dart-null-safety

9
推荐指数
2
解决办法
6759
查看次数

Flutter Null 安全迁移说“包不存在”

Flutter Null 安全迁移

我正在尝试将我的项目迁移到 Flutter Null Safety 版本,并且我正在遵循官方迁移指南。

当我运行第二个命令时,它说
Package doesn't exist (the Flutter SDK is not available).

我跑的命令

me@My-MacBook-Air my_project % dart --version
Dart SDK version: 2.12.0 (stable) (Thu Feb 25 19:50:53 2021 +0100) on "macos_x64"
me@My-MacBook-Air my_project %dart pub outdated --mode=null-safety
Package doesn't exist (the Flutter SDK is not available).

颤振医生输出

me@My-MacBook-Air my_project % `flutter doctor -v`
Flutter (Channel beta, 2.0.2, on macOS 11.2.3 20D91 darwin-x64, locale en-IN)
    • Flutter version 2.0.2 at /Users/me/flutter
    • …
Run Code Online (Sandbox Code Playgroud)

migration dart flutter dart-null-safety

9
推荐指数
1
解决办法
2408
查看次数

Late和final可以一起用吗?

我现在正在尝试 NNBD,我想知道您是否可以使用 new 关键字latefinal一起使用。

据我了解,late属性可以在任何地方设置。您基本上是在告诉分析器,使用时它不会为空。
我认为这在某些情况下有点危险。

所以我想知道是否可以late final在 NNBD 中添加 a ,这会告诉分析器该属性必须在类构造函数中初始化。

有一个类似的问题,但我想当时没有零安全性: Dart。后期初始化最终变量

dart dart-null-safety

8
推荐指数
2
解决办法
4240
查看次数

使用颤振 2.0.0 构建旧项目的问题

升级到 flutter 2.0.0 后,我无法再构建应用程序了。这是输出。我的问题是我大量使用库,其中很多都不是空安全的,我无法将所有依赖项升级到空安全模式。有没有人对此有任何建议?

Try calling using ?. instead.
    ).replaceFirst(r'$remainingCount', formatDecimal(remainingCount));
      ^^^^^^^^^^^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/extended_image-1.6.0/lib/src/extended_image.dart:785:44: Error: No named parameter with the name 'nullOk'.
    _invertColors = MediaQuery.of(context, nullOk: true)?.invertColors ??
                                           ^^^^^^
../../flutter/flutter/packages/flutter/lib/src/widgets/media_query.dart:818:25: Context: Found this candidate, but the arguments don't match.
  static MediaQueryData of(BuildContext context) {

                        ^^
../../flutter/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_svg-0.18.1/lib/src/picture_provider.dart:50:59: Error: No named parameter with the name 'nullOk'.
        context != null ? Localizations.localeOf(context, nullOk: true) : null,
                                                          ^^^^^^
../../flutter/flutter/packages/flutter/lib/src/widgets/localizations.dart:413:17: Context: Found this candidate, but the arguments don't match.
  static Locale localeOf(BuildContext context) {

                ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

更新 …

flutter dart-null-safety

8
推荐指数
1
解决办法
1350
查看次数

Flutter null 安全 - 参数类型“颜色?” 不能分配给参数类型“颜色”

我将 flutter 的 SDK 版本更改为 min ,以便我可以修复我的代码以确保空值安全。

有一个我不明白的问题,这一行产生了以下错误:

The argument type 'Color?' can't be assigned to the parameter type 'Color'

border: Border.all(color: Colors.grey[300], width: 1),
Run Code Online (Sandbox Code Playgroud)

但是如果我改变Colors.grey[300]任何不使用的值[],它就会工作,所以Colors.grey工作得很好。

我应该在这里更改什么以继续使用grey[300]

flutter dart-null-safety

8
推荐指数
2
解决办法
1625
查看次数

Flutter WillPopScope 与 AlertDialog 迁移到空安全

我最近将我的 Flutter 应用程序迁移到空安全,但 WillPopScope 与 AlertDialog 结合使用会导致问题。WillPopScope期望Future<bool>showDialog返回Future<bool?>,我不知道如何将一个投射到另一个上。

Widget _buildBody(BuildContext context) {
  return WillPopScope(
    onWillPop: (() => _onBackPressed(context)) as Future<bool> Function(),
    child: new Container([...]),
  );
}

// this should return a Future<bool> but showDialog doesn't allow that
Future<bool?> _onBackPressed(BuildContext context) async {
  if (someCondition) {
    // showDialog returns a Future<T?> 
    return showDialog(
      context: context,
      builder: (context) => new AlertDialog(
        [...]
        actions: <Widget>[
          new TextButton(
            child: Text("cancel",
            onPressed: () => Navigator.of(context).pop(false),
          ),
          new TextButton( …
Run Code Online (Sandbox Code Playgroud)

flutter dart-null-safety

8
推荐指数
2
解决办法
8454
查看次数

“抽屉”中的 Flutter 本地化会导致“空值检查运算符使用空值”错误

在首次使用Dart/Flutter时,我创建了一个非常简单的演示应用程序,其中包含Drawer. 该应用程序在Android 模拟器中编译并启动,但不久后就中止并显示错误消息Null check operator used on a null value。在 之外Drawer,本地化工作完美无缺。

\n

我到底做错了什么以及如何解决?

\n

版本:

\n
Flutter 2.2.0 \xe2\x80\xa2 channel stable \xe2\x80\xa2 https://github.com/flutter/flutter.git\nFramework \xe2\x80\xa2 revision b22742018b (12 days ago) \xe2\x80\xa2 2021-05-14 19:12:57 -0700\nEngine \xe2\x80\xa2 revision a9d88a4d18\nTools \xe2\x80\xa2 Dart 2.13.0\n
Run Code Online (Sandbox Code Playgroud)\n

GitHub 上提供了该应用程序的完整源代码:https://github.com/DarkPurpleKnight/null_issue

\n

主要.dart:

\n
import \'package:flutter/material.dart\';\nimport \'package:flutter_localizations/flutter_localizations.dart\';\nimport \'package:flutter_gen/gen_l10n/app_localizations.dart\';\n\n\nvoid main() {\n  runApp(NullIssueApp());\n}\n\nclass NullIssueApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: \'Null issue\',\n      localizationsDelegates: [\n        AppLocalizations.delegate,\n        GlobalMaterialLocalizations.delegate,\n …
Run Code Online (Sandbox Code Playgroud)

dart flutter dart-null-safety

8
推荐指数
1
解决办法
4560
查看次数

分配非空值文字时的空安全类型提升

nullsafety.dartpad.dev 中,如果我编写以下代码:

void main() {
  String? name = 'Bob';
  print(name.length);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下编译时错误:

值可以为“空”的表达式必须先进行空检查,然后才能取消引用

以及以下运行时错误:

无法在“字符串?”上访问属性“长度” 因为它可能为空。

空检查文档的类型提升说:

该语言在什么样的表达方式会导致提升方面也更加聪明。一个明确的== null!= null当然的作品。但是使用as赋值或后缀!运算符的显式转换也会导致提升。总体目标是,如果代码是动态正确的,并且可以合理地静态计算出来,那么分析应该足够聪明来做到这一点。

有没有可行的方法name可能是空在上面的代码。该文档还说分配应该导致类型提升。我误解了类型提升还是 DartPad 中的错误?

澄清

由于一些答案为错误消息提供了解决方法,我应该澄清一下,我不是在尝试解决上面的编码问题。相反,我是说我认为代码应该按原样工作。但事实并非如此。为什么不?

dart type-promotion dart-null-safety

7
推荐指数
1
解决办法
839
查看次数

如何修复“无法无条件调用运算符 '{0}',因为接收器可以为 'null'”

在尝试DartSound Null Safety 时,我遇到了一个问题:


一些上下文

创建一个新的Flutter项目我发现以下(并且非常熟悉)片段代码

int _counter = 0;

void _incrementCounter() {
  setState(() {
    // This call to setState tells the Flutter framework that something has
    // changed in this State, which causes it to rerun the build method below
    // so that the display can reflect the updated values. If we changed
    // _counter without calling setState(), then the build method would not be
    // called again, and so nothing would appear …
Run Code Online (Sandbox Code Playgroud)

dart flutter dart-null-safety

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

具有所需参数和 null 安全性的命名构造函数

以下代码无法以健全的 null 安全性进行编译,因为可以将 null 传递给初始化不可为 null 的字段myString的构造函数。

class MyClass {
  String myString;
  MyClass({@required this.myString});
}
Run Code Online (Sandbox Code Playgroud)

我希望在this.myString之后添加一个问号可以解决问题,但事实并非如此,并且会显示另一个编译错误。

默认值对我来说是没有选择的,似乎唯一的其他解决方案是这样的:

class MyClass {
  late String myString;
  MyClass({@required myString}) {
    this.myString = myString;
  }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,如果有很多参数,这会降低可读性。是否有更方便的解决方案支持以此进行初始化在命名构造函数中?

dart flutter dart-null-safety

7
推荐指数
2
解决办法
6850
查看次数