【问题标题】:Flutter StatefulWidget has no widget propertyFlutter StatefulWidget 没有小部件属性
【发布时间】:2020-12-21 02:35:54
【问题描述】:

我有一个为 Android 设置后端的 StatefulWidget:

class ToeKickSettings extends StatefulWidget {
  ToeKickSettings({
    Key key,
    this.backend
  }) : super(key: key);
  final AndroidBackend backend;
  @override
  _ToeKickSettingsState createState() => _ToeKickSettingsState();
}

class _ToeKickSettingsState extends State<ToeKickSettings> {
  double default_bottom_spacing = 5;
  List<Widget> listChildren = [];

  _ToeKickSettingsState() {
    generateListsFromSoundPacks().then((val) => setState(() {
      listChildren = val;
    }));
  }

  Future<List<Widget>> generateListsFromSoundPacks() async {
    List<Widget> list = new List<Widget>();
    List<String> soundPacks = await widget.backend.common.listSoundPacks();
    //...
  }
 }

我通过await widget.backend.common.listSoundPacks(); 访问StatefulWidget 的状态部分的后端

我收到此错误:

E/flutter (23645): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: NoSuchMethodError: The getter 'backend' was called on null.
E/flutter (23645): Receiver: null
E/flutter (23645): Tried calling: backend
E/flutter (23645): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
E/flutter (23645): #1      _ToeKickSettingsState.generateListsFromSoundPacks (package:flutter_app/toe_kick.dart:131:44)

这表明在调用 generateListsFromSoundPacks 时没有 widget 属性。我怀疑这与我从_ToeKickSettingsState createState() =&gt; _ToeKickSettingsState(); 打电话给_ToeKickSettingsState() 的时间有关。 wodget 属性可能尚未设置。

我能做什么?

【问题讨论】:

  • initState生命周期中尝试联合呼叫generateListsFromSoundPacks

标签: flutter dart


【解决方案1】:

不要在State class的构造函数中使用widget,将构造函数中的代码移动到initState

  @override
  void initState() {
    super.initState();
    generateListsFromSoundPacks().then((val) => setState(() {
      listChildren = val;
    }));
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 2021-08-18
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2021-08-08
    • 2019-08-24
    相关资源
    最近更新 更多