【问题标题】:Flutter Web - Unsupported operation: NaN error for canvas in Card widgetFlutter Web - 不支持的操作:卡片小部件中画布的 NaN 错误
【发布时间】:2021-05-04 07:01:59
【问题描述】:

我正在开发一个 Flutter Web 项目。我们使用库fl_chart。我们想在Card 小部件中使用PieChart,但它会引发错误Unsupported operation: NaN。它在调试和发布模式下发生(从命令行 flutter run lib/main.dart 和 flutter run --release lib/main.dart 启动),但在通过 VSCode 调试器启动应用程序时不会发生。

这是一个小例子 (main.dart):

import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';

class PieChartTest extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Card(    // <- If you change it to a Container, it is working fine
          child: PieChart(
            PieChartData(
              sections: [
                PieChartSectionData(
                  value: 4.0,
                  title: 'Section 1',
                  color: Colors.blue,
                ),
                PieChartSectionData(
                  value: 6.0,
                  title: 'Section 2',
                  color: Colors.red,
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

Future<void> main() async {
  runApp(PieChartTest());
}

这是日志

══╡ EXCEPTION CAUGHT BY SCHEDULER LIBRARY
╞═════════════════════════════════════════════════════════
The following UnsupportedError was thrown during a scheduler callback:
Unsupported operation: NaN

When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 216:49  throw_
dart-sdk/lib/_internal/js_dev_runtime/private/js_number.dart 80:5             toInt]
dart-sdk/lib/_internal/js_dev_runtime/private/js_number.dart 87:32            ceil]
lib/_engine/engine/bitmap_canvas.dart 176:52
_widthToPhysical
lib/_engine/engine/bitmap_canvas.dart 120:32                                  new
lib/_engine/engine/html/picture.dart 518:33
[_findOrCreateCanvas]
lib/_engine/engine/html/picture.dart 433:21
paintCallback
lib/_engine/engine/html/surface.dart 49:16
commitScene
lib/_engine/engine/html/scene_builder.dart 552:7                              <fn>
lib/_engine/engine/profiler.dart 36:18
timeAction
lib/_engine/engine/html/scene_builder.dart 546:12                             build
packages/flutter/src/rendering/layer.dart 770:35
buildScene
packages/flutter/src/rendering/view.dart 231:30
compositeFrame
packages/flutter/src/rendering/binding.dart 458:18                            drawFrame
packages/flutter/src/widgets/binding.dart 900:13                              drawFrame
packages/flutter/src/rendering/binding.dart 320:5
[_handlePersistentFrameCallback]
packages/flutter/src/scheduler/binding.dart 1119:15
[_invokeFrameCallback]
packages/flutter/src/scheduler/binding.dart 1057:9
handleDrawFrame
packages/flutter/src/scheduler/binding.dart 865:7                             <fn>
dart-sdk/lib/_internal/js_dev_runtime/private/isolate_helper.dart 48:19
internalCallback
═══════════════════════════════════════════════════════════════════════════════════════
═════════════
Another exception was thrown: Unsupported operation: NaN

我正在使用 Flutter 1.25.0-8.1.pre beta


发生了什么,为什么?

还有我该如何解决这个问题或者有什么解决方法?


编辑:

它也不适用于 Flutter 1.25.0-8.3.pre • channel beta 并遇到同样的问题。 它适用于 Flutter 1.26.0-17.1.pre • channel dev 。

但是我们使用的项目需要beta通道。

使用选项--web-renderer canvaskit 可以工作,但我想继续使用html 选项。

【问题讨论】:

  • 我正在使用 Flutter 1.26.0-1.0.pre dev 并且运行良好。
  • 嘿,我只是想检查一下,您是使用我在问题中描述的命令行还是使用了 IDE 的集成调试器?
  • 是的,我使用了命令行。
  • 我刚刚尝试使用 Flutter 1.25.0-8.3.pre • channel beta 并遇到了同样的问题:/ 我实际上在 1.26.0-17.1.pre • channel dev 上工作。但是我们使用的项目需要beta通道。我已经相应地更新了我的帖子。

标签: flutter canvas flutter-web card fl-chart


【解决方案1】:

HTML Web Renderer 可能不支持。

尝试使用 CanvasKit Web 渲染器。

flutter run -d chrome --web-renderer canvaskit .\lib\main.dart

【讨论】:

  • 它确实有效!但我不确定如果我们用它来构建我们的生产应用程序,它不会破坏其他任何东西
  • 最后,这是我们使用的解决方案。谢谢!
  • 同一个包,有些问题。如果有人在使用 canvaskit 之外找到解决方法,请@me。
【解决方案2】:

即使在调试模式下也能正常工作。

不过,我使用的是stable version 1.22.5。

【讨论】:

  • 嘿,我只是想检查一下,您使用的是我在问题中描述的命令行还是使用了 IDE 的集成调试器?
  • 是的。我是通过命令flutter run lib/main.dart 做到的
  • 我刚刚尝试使用 Flutter 1.25.0-8.3.pre • channel beta 并遇到了同样的问题:/ 我实际上在 1.26.0-17.1.pre • channel dev 上工作。但是我们使用的项目需要beta通道。我已经相应地更新了我的帖子。
猜你喜欢
  • 2020-08-02
  • 2020-06-09
  • 2022-09-22
  • 2022-01-24
  • 2020-10-10
  • 2014-03-10
  • 2021-10-01
  • 2021-12-23
  • 2015-02-16
相关资源
最近更新 更多