我有一个非常简单的Flutter应用程序,带有两个视图的TabBarView(选项卡1和选项卡2),其中一个(选项卡1)有一个带有许多简单文本窗口小部件的ListView,问题是我向下滚动ListView元素后的标签1,如果我刷卡从标签1至标签2,最后我刷卡从 标签2到选项卡1,在ListView控件之前的滚动位置标签1迷路.
这是代码:
import 'package:flutter/material.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => …
Run Code Online (Sandbox Code Playgroud) 我正在尝试实现无限滚动功能.
我尝试使用ListView
内部NotificationListener
来检测Scroll事件,但我看不到一个事件,说明滚动是否已到达视图的底部.
哪个是实现这个目标的最佳方法?
我正在尝试做一个我认为非常简单的Flutter应用程序,但是我无法弄清楚我的代码出了什么问题。
我有一个带抽屉小部件的Flutter应用程序。我正在使用此小部件制作“ 导航”抽屉,“ 抽屉”有一个ListView作为子级,而ListView包含用户可以选择的“ 视图”选项(A,B和C)。
由于应用程序的主页(MyHomePage)从StatefulWidget扩展而来,因此我加载新视图的唯一操作是调用setState方法以分配“控制变量”(viewName)的新值,因此我希望Flutter执行MyHomePage的Widget build(BuildContext context)方法,但是这次使用viewName的新值。
以上所有方法均按预期工作,问题在于在Scaffold的body字段中有一个TabBarView小部件,因为我想向用户显示每个视图带有两个选项卡(选项卡1和选项卡2)的视图(A,B和C)。
该TabBarView孩子们:
- 选项卡1的StatefulTab对象
- 用于Tab 2的简单Center小部件
我要在这里演示的是,当您点击Drawer的一个选项(例如,加载B视图)时,Tab 2会按预期更改其值,但是Tab 1(包含有状态的小部件)在更改时不会更改其值您点击抽屉的任何其他选项
注意:我必须对3个视图使用相同的StatefulTab …
我试图检测导航器何时执行基本操作(push和pop),我发现实现该功能的类是NavigatorObserver类,但是找不到如何工作的示例。
我已经尝试实现接口:
class MyClassState extends State<MyClass> with NavigatorObserver{
....
@override
void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
print('This is never get called');
}
@override
void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
print('This is never get called');
}
}
Run Code Online (Sandbox Code Playgroud)
当然,我在调用Navigator.of(context).push(...);
但是重写方法永远不会被调用。
我怀疑与导航器的绑定丢失了,但是我不确定。
有什么建议么?
提前致谢!
编辑:
我认为我想做的事情很简单,但是我不知道该怎么做。
我有一个网页A是推动网页B。
在网页B我有一个周期性的计时器是必须要在那里(在B页)。
所有我想要做的就是取消与计时器timer.cancel()
时,网页B得到弹出了(与Android或后退按钮在appbar后退按钮),因为当网页B得到弹出仍在执行即使定时器网页B有没了
编辑2:
-我找到了解决问题的方法,我所做的就是取消计时器
@override
void …
Run Code Online (Sandbox Code Playgroud)