Flutter 下拉革新

手机游戏开发者 2024-9-23 14:27:52 17 0 来自 中国
Flutter 中下拉革新必要用到 RefreshIndicator 组件,一样寻常在 ScrollView 或 ListView 外包一层 RefreshIndicator 组件即可。
1. 常见用法

  Future _onRefresh() async {    //......实现革新逻辑  }  @override  Widget build(BuildContext context) {    return RefreshIndicator(      onRefresh: _onRefresh,              child: SingleChildScrollView(        child: Container(),      ));  }利用很简朴,只必要实现 onRefresh 函数即可,这也是一个 Future 函数,当该 Future 实行完毕时,革新操纵也就完成了。是不是很希奇,当我们用原生代码写下拉革新时,通常必要界说一个状态来表现革新状态,到 Flutter 这里居然啥都不消管。当触发下拉革新时,就会实行 onRefresh 函数,只要该函数没有实行完毕,UI 上就不停表现的是革新状态,一旦该函数实行完毕,UI 状态也会自动改变成革新完成。
2. 怎么触发自动革新

通常我们进入某个页面时,盼望一进去就会触发自动下拉革新,但是找了一圈发现没有什么属性可设置。颠末一番研究,发现 RefreshIndicator 也是一个有状态组件,我们可直接获取该组件的状态,通过它的状态来手动触发下拉革新。这就必要用到每个 Widget 都会有的 Key 属性了,通过 key 可以得到其对应的状态。具体代码如下:
  //自界说 RefreshIndicatorState 范例的 Key  final GlobalKey<RefreshIndicatorState> _refreshKey = GlobalKey();  @override  void initState() {    super.initState();    //必须在组件挂载运行的第一帧后实行,否则 _refreshKey 还没有与组件状态关联起来    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {       //关键代码,直打仗发下拉革新      _refreshKey.currentState?.show();    });  }  Future _onRefresh() async {    //......实现革新逻辑  }  @override  Widget build(BuildContext context) {    return RefreshIndicator(      key: _refreshKey,    //自界说 key,必要通过 key 获取到对应的 State      onRefresh: _onRefresh,              child: SingleChildScrollView(        child: Container(),      ));  }3. 页面不能滚动时无法触发下拉革新

假如页面内容很少,在一屏内不能滚动,你会发现无法触发下拉革新。办理这个标题,必要设置 ScrollView 的 physics 属性。
终极完备办理方案如下:
  //自界说 RefreshIndicatorState 范例的 Key  final GlobalKey<RefreshIndicatorState> _refreshKey = GlobalKey();  @override  void initState() {    super.initState();    //必须在组件挂载运行的第一帧后实行,否则 _refreshKey 还没有与组件状态关联起来    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {       //关键代码,直打仗发下拉革新      _refreshKey.currentState?.show();    });  }  Future _onRefresh() async {    //......实现革新逻辑  }  @override  Widget build(BuildContext context) {    return RefreshIndicator(      key: _refreshKey,    //自界说 key,必要通过 key 获取到对应的 State      onRefresh: _onRefresh,              child: SingleChildScrollView(        physics: const AlwaysScrollableScrollPhysics(),        child: Container(),      ));  }默认环境下,当 ScrollView 包裹的内容太少时,是不会触发滚动事故的,如许也就不会触发下拉革新。AlwaysScrollableScrollPhysics 则可以在这种环境下,触发滚动事故。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:48, Processed in 0.170381 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表