Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mobile 颤振-隐藏浮动动作按钮_Mobile_Dart_Flutter - Fatal编程技术网

Mobile 颤振-隐藏浮动动作按钮

Mobile 颤振-隐藏浮动动作按钮,mobile,dart,flutter,Mobile,Dart,Flutter,Flatter中是否有内置的方式隐藏列表视图上的浮动操作按钮,向下滚动,然后向上滚动显示?导入“package:Flatter/material.dart”; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; void main() { runApp(new MyApp()); } class MyApp extends StatelessWidget { // This

Flatter中是否有内置的方式隐藏
列表视图上的
浮动操作按钮
,向下滚动,然后向上滚动显示?

导入“package:Flatter/material.dart”;
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @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() => new _MyHomePageState();
 }

 class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;
  ScrollController _hideButtonController;
  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }
  var _isVisible;
  @override
  initState(){
    super.initState();
    _isVisible = true;
    _hideButtonController = new ScrollController();
    _hideButtonController.addListener((){
      if(_hideButtonController.position.userScrollDirection == ScrollDirection.reverse){
        if(_isVisible == true) {
            /* only set when the previous state is false
             * Less widget rebuilds 
             */
            print("**** ${_isVisible} up"); //Move IO away from setState
            setState((){
              _isVisible = false;
            });
        }
      } else {
        if(_hideButtonController.position.userScrollDirection == ScrollDirection.forward){
          if(_isVisible == false) {
              /* only set when the previous state is false
               * Less widget rebuilds 
               */
               print("**** ${_isVisible} down"); //Move IO away from setState
               setState((){
                 _isVisible = true;
               });
           }
        }
    }});
  }
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Center(
        child: new CustomScrollView(
          controller: _hideButtonController,
          shrinkWrap: true,
          slivers: <Widget>[
            new SliverPadding(
              padding: const EdgeInsets.all(20.0),
              sliver: new SliverList(
                delegate: new SliverChildListDelegate(
                  <Widget>[
                    const Text('I\'m dedicating every day to you'),
                    const Text('Domestic life was never quite my style'),
                    const Text('When you smile, you knock me out, I fall apart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('And I thought I was so smart'),
                    const Text('I realize I am crazy'),   
                  ],
                ),
              ),
            ),
          ],
        )
      ),
      floatingActionButton: new Visibility( 
        visible: _isVisible,
        child: new FloatingActionButton(
          onPressed: _incrementCounter,
          tooltip: 'Increment',
          child: new Icon(Icons.add),
        ),     
      ),
    );
  }
}
导入“package:flatter/rendering.dart”; void main(){ runApp(新的MyApp()); } 类MyApp扩展了无状态小部件{ //此小部件是应用程序的根。 @凌驾 小部件构建(构建上下文){ 返回新材料PP( 标题:“颤振演示”, 主题:新主题数据( 主样本:颜色。蓝色, ), 主页:新MyHomePage(标题:“颤振演示主页”), ); } } 类MyHomePage扩展StatefulWidget{ MyHomePage({Key,this.title}):超级(Key:Key); 最后的字符串标题; @凌驾 _MyHomePageState createState()=>new_MyHomePageState(); } 类_MyHomePageState扩展状态{ int _计数器=0; ScrollController\u hideButtonController; void _incrementCounter(){ 设置状态(){ _计数器++; }); } var_是可见的; @凌驾 initState(){ super.initState(); _isVisible=true; _hideButtonController=新的ScrollController(); _hideButtonController.addListener((){ if(_hideButtonController.position.userScrollDirection==ScrollDirection.reverse){ 如果(_isVisible==true){ /*仅在前一状态为false时设置 *重建的小部件更少 */ 打印(“**${u isVisible}up”);//将IO从设置状态移走 设置状态(){ _isVisible=false; }); } }否则{ if(_hideButtonController.position.userScrollDirection==ScrollDirection.forward){ 如果(_isVisible==false){ /*仅在前一状态为false时设置 *重建的小部件更少 */ 打印(“**${u isVisible}down”);//将IO从设置状态移走 设置状态(){ _isVisible=true; }); } } }}); } @凌驾 小部件构建(构建上下文){ 归还新脚手架( appBar:新的appBar( 标题:新文本(widget.title), ), 正文:新中心( 子项:新自定义滚动视图( 控制器:_hideButtonController, 收缩膜:对, 条子:[ 新型轧棉机( 填充:常数边集全部(20.0), 银条:新银条列表( 委托:新建SliverChildListDelegate( [ const Text(“我每天都在为你奉献”), const Text(“家庭生活从来都不是我的风格”), const Text(“当你微笑时,你击倒了我,我崩溃了”), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text('我觉得我很聪明'), const Text(“我意识到我疯了”), ], ), ), ), ], ) ), 浮动操作按钮:新的可见性( 可见:_是可见的, 子:新的浮动操作按钮( 按下时:\ u递增计数器, 工具提示:“增量”, 子:新图标(Icons.add), ), ), ); } }
如果我没有使用listview,我很抱歉,因为我不知道如何使用listview滚动。我将回答你问题的其他部分

首先,您需要创建一个用于侦听事件的

如果scrollcontroller设法找到正向或反向。添加一个将状态设置为可见的状态

绘制按钮时,将按钮包装在类中。您设置了可视标志,小部件应该忽略输入命令

编辑:我似乎不能添加链接到ScrollController、ScrollPosition、,
floatingActionButton: Visibility(
  child: FloatingActionButton(...),
  visible: false, // set it to false
)
floatingActionButton: Column(
  children: <Widget>[
    if (shouldShow) FloatingActionButton(...), // visible if showShould is true
  ],
)
floatingActionButton: Opacity(
  opacity: shouldShow ? 1 : 0, // visible if showShould is true
  child: FloatingActionButton(...),
)
  floatingActionButton:
            Visibility(visible: _visibilityFlag , child: _buildFAB(context)),
AnimatedOpacity(
          opacity: isEnabled ? 0.0 : 1.0,
          duration: Duration(milliseconds: 1000),
          child: FloatingActionButton(
             onPressed: your_method,
             tooltip: 'Increment',
             child: new Icon(Icons.add),
          ),
        )
class WidgetState extends State<Widget> with TickerProviderStateMixin<Widget> {
  AnimationController _hideFabAnimation;

  @override
  initState() {
    super.initState();
    _hideFabAnimation = AnimationController(vsync: this, duration: kThemeAnimationDuration);
  }

  @override
  void dispose() {
    _hideFabAnimation.dispose();
    super.dispose();
  }

  bool _handleScrollNotification(ScrollNotification notification) {
    if (notification.depth == 0) {
      if (notification is UserScrollNotification) {
        final UserScrollNotification userScroll = notification;
        switch (userScroll.direction) {
          case ScrollDirection.forward:
            if (userScroll.metrics.maxScrollExtent !=
                userScroll.metrics.minScrollExtent) {
              _hideFabAnimation.forward();
            }
            break;
          case ScrollDirection.reverse:
           if (userScroll.metrics.maxScrollExtent !=
                userScroll.metrics.minScrollExtent) {
              _hideFabAnimation.reverse();
            }
            break;
          case ScrollDirection.idle:
            break;
        }
      }
    }
    return false;
  }

  @override
  Widget build(BuildContext context) {
    return NotificationListener<ScrollNotification>(
      onNotification: _handleScrollNotification,
      child: Scaffold(
        appBar: AppBar(
          title: Text('Fabulous FAB Animation')
        ),
        body: Container(),
        floatingActionButton: ScaleTransition(
          scale: _hideFabAnimation,
          alignment: Alignment.bottomCenter,
          child: FloatingActionButton(
            elevation: 8,
            onPressed: () {},
            child: Icon(Icons.code),
          ),
        ),
      ),
    );
  }
}
floatingActionButton: _isVisible
        ? FloatingActionButton(...)
        : null,
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  ScrollController controller;
  bool fabIsVisible = true;

  @override
  void initState() {
    super.initState();
    controller = ScrollController();
    controller.addListener(() {
      setState(() {
        fabIsVisible =
            controller.position.userScrollDirection == ScrollDirection.forward;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        controller: controller,
        children: List.generate(
            100,
            (index) => ListTile(
                  title: Text("Text $index"),
                )),
      ),
      floatingActionButton: AnimatedOpacity(
        child: FloatingActionButton(
          child: Icon(Icons.add),
          tooltip: "Increment",
          onPressed: () {
            print("Pressed");
          },
        ),
        duration: Duration(milliseconds: 100),
        opacity: fabIsVisible ? 1 : 0,
      ),
    );
  }
}