我有一个NavBar我通过 a 控制的Provider:
class BottomNavBarProvider extends ChangeNotifier {
final PageController navigationController = PageController(initialPage: 0);
int selectedTabIndex = 0;
BottomNavBarProvider() {}
void selectTab(int index) {
navigationController.jumpToPage(index);
selectedTabIndex = navigationController.page?.round() ?? 0;
notifyListeners();
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
我认为问题是我使用 aProvider来存储我的,PageContrller所以如果我推送到另一个页面,在那里BottomBar使用 ,它总是附加到来自提供者的同一个页面。所以我想我需要一种方法来正确dispose的PageController。但是我该怎么做呢?
我在我的内部使用它ApplicationContainer:
class ApplicationContainer extends StatelessWidget {
@override
Widget build(BuildContext context) {
initSizeService(context);
return Scaffold(
body: PageView(
controller:
Provider.of<BottomNavBarProvider>(context).navigationController,
children: <Widget>[
HomePage(),
EntryPage(),
VitalsHistoryPage(
Provider.of<VitalsHistoryProvider>(context),
),
SettingsPage(),
], …Run Code Online (Sandbox Code Playgroud) 我有一个NestedScrollView容纳有SliverAppBar带TabBarView和标签由每一个无限加载列表。现在我只有一个ScrollController附加到NestedScrollView,并且列表小部件读取此控制器的滚动位置。
无限加载逻辑用于controller.position.extentAfter决定何时从 API 获取数据。但是使用多个选项卡,我收到错误
ScrollController 附加到多个滚动视图。
我尝试阅读,controller.positions但无法理解可用的 2 行文档。我的问题是,是否可以在 a 中访问每页的滚动位置,TabBarView还是应该ScrollController为每个页面单独使用而忘记正确滚动条子?
我的Flutter应用程序从ScrollController要控制的页面离开时抛出了异常(将ScrollController附加到多个滚动视图)NestedScrollView,但我不确定自己在做什么错。
我用下面的简单示例重新创建了异常。我可以从导航FirstPage到SecondPage(也可以向后导航)就好了,但是当我从导航SecondPage到ThirdPage异常时,会引发异常。该SecondPage页面包含我CollapsingAppBarPage认为有问题的自定义窗口小部件。CollapsingAppBarPage在此示例中被简化,但是在我的真实应用中,它会根据滚动位置更改组件的颜色/大小。在此示例中,当_scrollController.offset导航开始到时会在发生时发生异常ThirdPage。另外,我知道FirstPage和ThirdPage可能是Stateless而不是StatefulWidgets,但我想使其尽可能与我的应用程序一样。这是我充分工作的例子。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: FirstPage(),
);
}
}
class FirstPage extends StatefulWidget {
@override
_FirstPageState createState() => _FirstPageState();
}
class _FirstPageState extends State<FirstPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("First Page"),
),
body: …Run Code Online (Sandbox Code Playgroud)