我在屏幕上使用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];
,Home
和History
。
一切正常,我可以移至History Detail
屏幕。在我从history
屏幕重定向到History Detail
并返回History
之前,我重定向到Navigator.of(context).pop
屏幕。我想从Home
返回后继续停留在History Detail
屏幕中。
我已经初始化了initialPage为 0 ,并用History
更改了initialPage,但是什么也没有发生,我仍然重定向到onPageChanged
屏幕。
我该怎么办?
Home
答案 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()));