Flutter:PageView保持在上一个屏幕中

时间:2019-12-19 02:57:10

标签: flutter dart

我在屏幕上使用PageView导航到另一个屏幕。我有3个屏幕 self.engine=[[AVAudioEngine alloc] init]; self.sampler= [AVAudioUnitSampler new]; NSError *error=nil; NSURL soundfontFileURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"sf2"]]; [_sampler loadSoundBankInstrumentAtURL:soundfontFileURL program:0 bankMSB:0x79 bankLSB:0 error:&error]; [self.engine attachNode:_sampler]; [self.engine connect:_sampler to:[self.engine outputNode] format:nil]; if([self.engine startAndReturnError:&error]){ NSLog(@"start ok "); }else{ NSLog(@"start err: %@",error); } //play at here is ok. //[_sampler startNote:60 withVelocity:100 onChannel:0]; [self.engine stop]; if([self.engine startAndReturnError:&error]){ NSLog(@"start ok "); }else{ NSLog(@"start err: %@",error); } //after stop and start again,play crash AudioStreamerImpl::sIOWorkerProcess (17) [_sampler startNote:60 withVelocity:100 onChannel:0]; HomeHistory

一切正常,我可以移至History Detail屏幕。在我从history屏幕重定向到History Detail并返回History之前,我重定向到Navigator.of(context).pop屏幕。我想从Home返回后继续停留在History Detail屏幕中。

我已经初始化了initialPage为 0 ,并用History更改了initialPage,但是什么也没有发生,我仍然重定向到onPageChanged屏幕。

我该怎么办?

这是我的源代码。

Home

Pageview

2 个答案:

答案 0 :(得分:1)

我发现了问题。

当您按下返回按钮时,它将重新构建您的主窗口小部件。在build方法中,您有FutureBuilder也会被重建。

因此它将显示CircularProgressIndicator。由于Hive.openBox("debt_box")即时给出结果,因此您看不到它。

在显示CircularProgressIndicator时,您的PageView已停用(已从小部件树中删除)。因此_pageController失去了客户。

CircularProgressIndicator之后,将创建一个新的PageView

这就是为什么它显示Home

解决方案:

根据document,我们不应在构建过程中直接分配future: Hive.openBox("debt_box")。而是创建一个Future变量并在initState中对其进行初始化,然后将该变量传递给future的{​​{1}}属性

FutureBuilder

答案 1 :(得分:0)

在“您的历史记录”页面上尝试/使用此功能

 Navigator.push(context,
    MaterialPageRoute(builder: (context) => YourDestination()));