Flutter 使用软件包flatter\u webview\u插件获取旧的滚动偏移
我正在尝试使用该软件包将Webview集成到测试应用程序中 我的目标是当用户在Webview中向上滚动时隐藏底部导航栏,当用户向下滚动时显示它 在提到的软件包中,有一个用于收听垂直Schroll变化的程序:Flutter 使用软件包flatter\u webview\u插件获取旧的滚动偏移,flutter,Flutter,我正在尝试使用该软件包将Webview集成到测试应用程序中 我的目标是当用户在Webview中向上滚动时隐藏底部导航栏,当用户向下滚动时显示它 在提到的软件包中,有一个用于收听垂直Schroll变化的程序: final flutterWebviewPlugin = new FlutterWebviewPlugin(); flutterWebviewPlugin.onScrollYChanged.listen((double offsetY) { // latest offset value in
final flutterWebviewPlugin = new FlutterWebviewPlugin();
flutterWebviewPlugin.onScrollYChanged.listen((double offsetY) { // latest offset value in vertical scroll
// compare vertical scroll changes here with old value
});
offsetY值是当前值,但是我如何才能得到旧值来与新值进行比较呢?有什么想法吗 好的,我已经实现了一个解决方案 我定义了一个变量
oldOffset=0.0
,并在方法trackOffsetChange
中检查oldOffset
值是否小于currentOffset
值。如果是这种情况,则oldOffset
获取currentOffset
的值,并使用setState
重建小部件以隐藏BottomNavBar
,否则显示BottomNavBar
以下是测试应用程序的全部代码,如果像我这样的新手有兴趣查看源代码:
import 'package:flutter/material.dart';
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: WebInApp(),
);
}
}
class WebInApp extends StatefulWidget {
@override
_WebInAppState createState() => _WebInAppState();
}
class _WebInAppState extends State<WebInApp> {
bool _isVisible = true;
double oldOffset = 0.0;
final flutterWebOlugin = FlutterWebviewPlugin();
void trackOffsetChange(double currentOffset) {
print('current Offset --->> $currentOffset');
print('old Offset --->> $oldOffset');
if (oldOffset < currentOffset) {
print('old Offset In -- IF --->> $oldOffset');
oldOffset = currentOffset;
setState(() {
_isVisible = false;
});
} else {
setState(() {
_isVisible = true;
});
print('old Offset In -- ESLE --->> $oldOffset');
oldOffset = currentOffset;
}
}
@override
void initState() {
super.initState();
flutterWebOlugin.onScrollYChanged.listen((double yOffset) {
trackOffsetChange(yOffset);
});
}
@override
Widget build(BuildContext context) {
return WebviewScaffold(
url: "https://play.google.com/store/apps",
// hidden: true,
appBar: AppBar(
title: Text('WebView'),
),
bottomNavigationBar: AnimatedContainer(
duration: Duration(microseconds: 300),
height: _isVisible ? 60.0 : 0.0,
child: bottomNav(),
),
);
}
}
class bottomNav extends StatelessWidget {
const bottomNav({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.forward),
title: Text('back'),
),
BottomNavigationBarItem(
icon: Icon(Icons.arrow_back),
title: Text('forward'),
),
],
);
}
}
导入“包装:颤振/材料.省道”;
导入“包:flatter_webview_plugin/flatter_webview_plugin.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:WebInApp(),
);
}
}
类WebInApp扩展了StatefulWidget{
@凌驾
_WebInAppState createState()=>\u WebInAppState();
}
类_WebInAppState扩展状态{
bool _isVisible=true;
双oldOffset=0.0;
final flatterwebolugin=flatterwebviewplugin();
无效trackOffsetChange(双电流偏移){
打印('current Offset-->$currentOffset');
打印('old Offset-->$oldcoffset');
if(oldOffset>$oldcoffset');
oldOffset=currentOffset;
设置状态(){
_isVisible=false;
});
}否则{
设置状态(){
_isVisible=true;
});
打印('old Offset In--ESLE-->$oldcoffset');
oldOffset=currentOffset;
}
}
@凌驾
void initState(){
super.initState();
flatterwebolgin.onScrollYChanged.listen((双yOffset){
跟踪偏移范围(yOffset);
});
}
@凌驾
小部件构建(构建上下文){
返回WebviewScaffold(
url:“https://play.google.com/store/apps",
//隐藏:是的,
appBar:appBar(
标题:文本(“网络视图”),
),
底部导航栏:动画容器(
持续时间:持续时间(微秒:300),
高度:_可见?60.0:0.0,
子项:bottomNav(),
),
);
}
}
类bottomNav扩展了无状态小部件{
常量底部导航({
关键点,
}):super(key:key);
@凌驾
小部件构建(构建上下文){
返回底部导航栏(
项目:[
底部导航气压计(
图标:图标(图标向前),
标题:文本(“背面”),
),
底部导航气压计(
图标:图标(图标。箭头返回),
标题:文本(“转发”),
),
],
);
}
}