Необработанное исключение: setState() вызывается в конструкторе:
Я знаю, что есть много похожих вопросов, но ни один мне не помог, поэтому я публикую этот, так что терпите меня.
Мой экран:
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())
Я возвращаю экземпляр Future, который перехожу к ListView в updateUI.
Если я напечатаю temp в updateUI, я получаю:
ListView(scrollDirection: вертикальный, основной: с использованием основного контроллера, AlwaysScrollableScrollPhysics, shrinkWrap: упаковка в термоусадочную пленку)
так что я думаю, что это работает до сих пор.
Проблема в том, что когда я вызываю setState () в updateUI, я получаю сообщение об ошибке
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>
Подобный код отлично работает в другом проекте, так что это сводит меня с ума.