0

我知道有很多类似的问题,但没有一个对我有帮助,这就是我发布这个问题的原因,所以请多多包涵。

我的屏幕是:

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:manager/components/account.dart';

import 'package:manager/components/roundRectButton.dart';
import 'package:manager/constants.dart';
import 'package:manager/services/networking.dart';

// NetworkHelper networkHelper = NetworkHelper();
List<RoundRectButton> navigation = [
  RoundRectButton(
      'Volumes', () => _DashboardState().updateUI(Account().returnedData())),
];

class Dashboard extends StatefulWidget {
  @override
  _DashboardState createState() => _DashboardState();
}

class _DashboardState extends State<Dashboard> {
  dynamic result;

  dynamic updateUI(fun) async {
    ListView temp = await fun;
    result = temp;
    // setState(() {
    //   result = temp;
    // });
  }

  @override
  void initState() {
    setState(() {
      result = Text('Hello');
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Column(
          children: <Widget>[
            SingleChildScrollView(
              scrollDirection: Axis.horizontal,
              child: Row(
                children: navigation,
              ),
            ),
            Divider(
              color: kGreenColor,
            ),
            Padding(
              padding: EdgeInsets.all(10),
              child: result,
            ),
          ],
        ),
      ),
    );
  }
}

随着_DashboardState().updateUI(Account().returnedData())我返回一个“未来”的实例,我在 updateUI 中将其转向 ListView。

如果我在 updateUI 中打印 temp 我得到:

ListView(scrollDirection:垂直,主要:使用主控制器,AlwaysScrollableScrollPhysics,shrinkWrap:收缩包装)

所以我想这到目前为止有效。

问题是当我在 updateUI 中调用 setState() 时,出现错误

E/flutter ( 5156): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: setState() called in constructor: _DashboardState#6c793(lifecycle state: created, no widget, not mounted)
E/flutter ( 5156): This happens when you call setState() on a State object for a widget that hasn't been inserted into the widget tree yet. It is not necessary to call setState() in the constructor, since the state is already assumed to be dirty when it is initially created.
E/flutter ( 5156): #0      State.setState.<anonymous closure> (package:flutter/src/widgets/framework.dart:1255:9)
E/flutter ( 5156): #1      State.setState (package:flutter/src/widgets/framework.dart:1266:6)
E/flutter ( 5156): #2      _DashboardState.updateUI (package:manager/screens/dashboard.dart:32:5)
E/flutter ( 5156): <asynchronous suspension>

类似的代码在另一个项目中完美运行,所以它让我发疯。

4

0 回答 0