You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:48:26