【问题标题】:how can i Call event after scroll controller attached附加滚动控制器后如何调用事件
【发布时间】:2020-11-25 05:37:40
【问题描述】:
@override
  void initState()
 {
    super.initState();
    _scrollController = ScrollController(initialScrollOffset: 0);
    _scrollController.addListener((_scrollControllerInitiated));
}

void _scrollControllerInitiated()
{
_scrollController.jumpto(1000);
}

附加滚动控制器后需要调用_scrollControllerInitiated方法

【问题讨论】:

  • _scrollControllerInitiated 里面会有什么?
  • 附加滚动控制器后需要跳转特定偏移量
  • 目前的方法有什么问题?
  • scrolllistener 在我仅滚动图像后触发(_scrollControllerInitiated) 在滚动页面后调用的方法,我需要在附加滚动控制器后立即调用该方法。
  • 然后也添加图片代码

标签: flutter dart flutter-dependencies


【解决方案1】:

_scrollController.addListener 所做的是监听任何滚动事件并调用注册的回调函数。如果在附加到 ListView 或任何可滚动小部件后滚动滚动以跳转到某个偏移量,则应在构建小部件后使用 WidgetsBinding.instance.addPostFrameCallback 注册回调函数。检查下面的代码

import 'package:flutter/material.dart';

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

class MyApp extends StatefulWidget {
  _MyApp createState() => _MyApp();
}

class _MyApp extends State<MyApp> {
  ScrollController _scrollController;

  void _scrollControllerInitiated() {
    _scrollController.animateTo(200,
        duration: Duration(milliseconds: 500), curve: Curves.ease);
  }

  Widget _itemBuilder(BuildContext context, int index) {
    return GestureDetector(
      onTap: () => setState(() {
        print("hello $index");
      }),
      child: Container(
        padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 15),
        child: Text("Box $index"),
      ),
    );
  }

  void initState() {
    super.initState();

    _scrollController = ScrollController();
    WidgetsBinding.instance.addPostFrameCallback((_) {
      _scrollControllerInitiated();
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Scroll Test"),
        ),
        body: ListView.builder(
          itemBuilder: _itemBuilder,
          itemCount: 200,
          controller: _scrollController,
        ),
      ),
    );
  }
}

【讨论】:

    【解决方案2】:

    试试这个。

    void _scrollControllerInitiated() {
      Future(() => _scrollController.jumpTo(1000));
    }
    

    【讨论】:

    • 它在之后调用,仅滚动图像。,我需要在连接滚动控制器后立即调用它。
    • @AllwinVinosh 一旦布置好东西(这意味着您的控制器已附加到 ListBody),它将被调用。我没有使用Future.delayed,它的常规Future
    猜你喜欢
    • 2019-08-18
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多