Flutter自定义下拉刷新:文本替代图标并触发页面跳转
自定义下拉跳转实现方案
我需要实现如下交互效果:当用户下拉页面时,显示文本**“下拉添加更多”**,当前页面的组件随之向下拖动;释放下拉操作后跳转至新页面。
原始布局代码:
body: Column( children: [ Expanded( flex: 4, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('本周支出', style: kSmallDarkGreyTextStyle), Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, textBaseline: TextBaseline.ideographic, children: [ const Padding( padding: EdgeInsets.all(3), child: Text('₹', style: kBigDarkGreyTextStyle), ), Text( weekAverage.toStringAsFixed(2), style: kBlackAmountTextStyle, ) ], ) ], )), Expanded( flex: 5, child: Column( children: const [ Text(''), ], ), ), ], ),
我没有使用RefreshIndicator,因为它无法替换默认的刷新图标,而我需要用文本替代图标。参考自定义下拉指示器方案后,将布局中的Expanded组件替换为固定高度组件,最终实现代码如下:
import 'package:expense_manager/constants.dart'; import 'package:flutter/material.dart'; import 'package:custom_refresh_indicator/custom_refresh_indicator.dart'; import 'package:responsive_sizer/responsive_sizer.dart'; import 'AddExpenditureScreen.dart'; class CurrentWeekScreen extends StatefulWidget { static String id = 'current_week_screen'; @override State<CurrentWeekScreen> createState() => _CurrentWeekScreenState(); } class _CurrentWeekScreenState extends State<CurrentWeekScreen> { late double weekAverage = 23454.99; IndicatorController controller = IndicatorController(); onlyDecimal(double weekAverage) {} @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.transparent, elevation: 0, leading: const Icon( Icons.search, color: Colors.black, size: 28, ), actions: [ IconButton( onPressed: () {}, icon: const Icon( Icons.add_circle_outlined, color: Colors.black, size: 28, ), ), ], ), body: CustomRefreshIndicator( builder: (BuildContext context, Widget child, IndicatorController controller) { return Text('下拉添加更多'); }, onRefresh: () async{ Navigator.pushNamed(context, AddExpenditureScreen.id); }, child: ListView( shrinkWrap: true, physics: const AlwaysScrollableScrollPhysics(), children: [ SizedBox( height: 38.h, child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('本周支出', style: kSmallDarkGreyTextStyle), Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, textBaseline: TextBaseline.ideographic, children: [ const Padding( padding: EdgeInsets.all(3), child: Text('₹', style: kBigDarkGreyTextStyle), ), Text( weekAverage.toStringAsFixed(2), style: kBlackAmountTextStyle, ) ], ) ], ), ), SizedBox( height: 60.h, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.stretch, children: const [ Text(''), ], ), ), ], ), ), ); } }
目前已成功实现页面跳转功能。
内容的提问来源于stack exchange,提问作者Parikshit23
相关产品推荐
相关产品推荐

