首页 > 解决方案 > 无法读取 null 的属性“getPositionForOffset$1”

问题描述

我的 Flutter Web 应用程序中有一个错误,在运行时更改应用程序本地化后很少出现,这种动态行为使用provider和包作为此处flutter_localizations描述的官方文档实现,并更改了. 这是堆栈跟踪使用localedarkTheme > fontFamilyMaterialApp

flutter build web --profile --dart-define=Dart2jsOptimization=O0

Uncaught TypeError: Cannot read property 'getPositionForOffset$1' of null
    at RenderParagraph.hitTestChildren$2$position (main.dart.js:96010)
    at RenderParagraph.hitTest$2$position (main.dart.js:90914)
    at RenderShiftedBox_hitTestChildren_closure.call$2 (main.dart.js:98256)
    at BoxHitTestResult.addWithPaintOffset$3$hitTest$offset$position (main.dart.js:90784)
    at _RenderAppBarTitleBox.hitTestChildren$2$position (main.dart.js:98249)
    at _RenderAppBarTitleBox.hitTest$2$position (main.dart.js:90914)
    at RenderSemanticsAnnotations.hitTestChildren$2$position (main.dart.js:96532)
    at RenderSemanticsAnnotations.hitTest$2$position (main.dart.js:90914)
    at RenderBoxContainerDefaultsMixin_defaultHitTestChildren_closure.call$2 (main.dart.js:91033)
    at BoxHitTestResult.addWithPaintOffset$3$hitTest$offset$position (main.dart.js:90784)

或者

Uncaught TypeError: Cannot read property 'getPositionForOffset$1' of null
    at RenderParagraph.hitTestChildren$2$position (main.dart.js:96020)
    at RenderParagraph.hitTest$2$position (main.dart.js:90924)
    at RenderShiftedBox_hitTestChildren_closure.call$2 (main.dart.js:98266)
    at BoxHitTestResult.addWithPaintOffset$3$hitTest$offset$position (main.dart.js:90794)
    at RenderPositionedBox.hitTestChildren$2$position (main.dart.js:98259)
    at RenderPositionedBox.hitTest$2$position (main.dart.js:90924)
    at RenderConstrainedBox.hitTestChildren$2$position (main.dart.js:96542)
    at RenderConstrainedBox.hitTest$2$position (main.dart.js:90924)
    at RenderExcludeSemantics.hitTestChildren$2$position (main.dart.js:96542)
    at RenderExcludeSemantics.hitTest$2$position

任何帮助将不胜感激

标签: flutterflutter-web

解决方案


解决方案是在请求本地化更改后何时重建最顶层的小部件树时提供一个UniqueKey()to MaterialApp(),因为先前计算的状态或约束不一定与新的fontFamilylocale. 另请注意,可能有另一种更有效的解决方案来解决这个问题,但这将完成这项工作。


推荐阅读