В моем приложении флаттера у меня есть главный экран с ящиком, который содержит столбец кнопок. При нажатии кнопки он переходит на другой экран и воспроизводит аудиодорожку с помощью этой функции:
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AudioPlayerPage(
cover: widget.assetPath,
num: widget.trackNumber,
currentTrackName: widget.trackName,
trackPath: widget.trackPath,
),
));
При возвращении из AudioPlayerPage я звоню
class _AudioPlayerPageState extends State<AudioPlayerPage> {
Future<bool> onBack()
{
AudioController.stopTrack();
Navigator.of(context).pop();
return null;
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: onBack,
child: (..)
Проблема заключается в том, что когда Я возвращаюсь, у меня появляется ошибка (которая не появляется, если я вручную закрываю ящик перед переходом на другой экран, но я хочу, чтобы он был открыт, когда пользователь возвращается. Есть ли способ сделать это? ?)
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following assertion was thrown while finalizing the widget tree:
setState() or markNeedsBuild() called when widget tree was locked.
This _ModalScope<dynamic> widget cannot be marked as needing to build because the framework is locked.
The widget on which setState() or markNeedsBuild() was called was: _ModalScope<dynamic>-[LabeledGlobalKey<_ModalScopeState<dynamic>>#f67c1]
state: _ModalScopeState<dynamic>#cd13e
When the exception was thrown, this was the stack:
#0 Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:3901:9)
#1 Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:3911:6)
#2 State.setState (package:flutter/src/widgets/framework.dart:1168:14)
#3 _ModalScopeState._routeSetState (package:flutter/src/widgets/routes.dart:664:5)
#4 ModalRoute.setState (package:flutter/src/widgets/routes.dart:784:30)
...
══════