Flutter 使用软件包flatter\u webview\u插件获取旧的滚动偏移

Flutter 使用软件包flatter\u webview\u插件获取旧的滚动偏移,flutter,Flutter,我正在尝试使用该软件包将Webview集成到测试应用程序中 我的目标是当用户在Webview中向上滚动时隐藏底部导航栏,当用户向下滚动时显示它 在提到的软件包中,有一个用于收听垂直Schroll变化的程序: final flutterWebviewPlugin = new FlutterWebviewPlugin(); flutterWebviewPlugin.onScrollYChanged.listen((double offsetY) { // latest offset value in

我正在尝试使用该软件包将Webview集成到测试应用程序中

我的目标是当用户在Webview中向上滚动时隐藏底部导航栏,当用户向下滚动时显示它

在提到的软件包中,有一个用于收听垂直Schroll变化的程序:

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);
@凌驾
小部件构建(构建上下文){
返回底部导航栏(
项目:[
底部导航气压计(
图标:图标(图标向前),
标题:文本(“背面”),
),
底部导航气压计(
图标:图标(图标。箭头返回),
标题:文本(“转发”),
),
],
);
}
}