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

如何在使用Getx与Future的Flutter应用中实现跳转新页面的查看更多按钮

解决方案

核心逻辑

  1. 通过isLoading状态处理异步加载过程,避免未初始化文本引发异常
  2. 文本加载完成后,将原文本与“查看更多”按钮组合展示
  3. 点击按钮通过Getx路由跳转至目标页面

修改后的HomeController

class HomeController extends GetxController {
  var isLoading = false.obs;
  Rx<QuranModel> mod = QuranModel().obs;
  final RemoteServices remoteServices = RemoteServices();
  RxString ayahText = ''.obs;

  @override
  void onInit() {
    super.onInit();
    fetchData();
  }

  fetchData() async {
    try {
      isLoading(true);
      final quranModel = await remoteServices.fetchData();
      mod.value = quranModel;
      ayahText.value = mod.value.data?.text ?? '暂无内容';
    } catch (e) {
      print('获取数据失败: $e');
      ayahText.value = '加载失败,请重试';
    } finally {
      isLoading(false);
    }
  }
}

注:移除了冗余的getText()方法,直接通过ayahText观察值获取文本,逻辑更简洁

UI层实现

Obx(() {
  final controller = Get.find<HomeController>();
  if (controller.isLoading.value) {
    return const Text('加载中...');
  }

  return Wrap(
    crossAxisAlignment: WrapCrossAlignment.center,
    children: [
      Text('${controller.ayahText.value}...'),
      TextButton(
        onPressed: () {
          // 替换为你的目标页面组件
          Get.to(() => const DetailPage());
        },
        child: const Text('查看更多'),
      ),
    ],
  );
})

关键细节说明

  • 用Wrap替代Row,避免文本过长时出现布局溢出
  • 通过Get.find<HomeController>()获取控制器实例,符合Getx状态管理规范
  • 加载状态显示占位文本,优化用户体验
  • 使用Get.to()完成页面跳转,是Getx路由的标准用法

内容的提问来源于stack exchange,提问作者Bakr Feras

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:22:12