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

Flutter无需页面跳转实现跨页面数据传递的方法咨询

Flutter 无页面跳转下的跨页面数据共享实现

以下是几种适合不同场景的实现方案,你可以根据项目复杂度选择:

方案1:单例类(轻量场景首选)

先定义一个全局单例类,专门存储跨页面共享的数据:

class AppData {
  // 单例实例,确保全局唯一
  static final AppData _instance = AppData._internal();
  factory AppData() => _instance;
  AppData._internal();

  // 存储选中的文档ID
  String? selectedDocumentedId;
}

修改你的onTap方法完成赋值:

class _EeachWorkModelState extends State<EeachWorkModel> {
  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        // 将目标ID存入单例类
        AppData().selectedDocumentedId = widget.prolist['doc_id'] as String?;
      },
      // 你的其他Widget代码...
    );
  }
}

在任意其他页面直接获取数据:

// 其他页面中获取选中的文档ID
String? targetDocId = AppData().selectedDocumentedId;

方案2:全局变量(简单但不推荐复杂项目)

在项目中创建一个全局变量文件(比如globals.dart):

// globals.dart
String? selectedDocumentedId;

修改onTap方法赋值:

import 'globals.dart'; // 引入全局变量文件

class _EeachWorkModelState extends State<EeachWorkModel> {
  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        selectedDocumentedId = widget.prolist['doc_id'] as String?;
      },
      // 你的其他Widget代码...
    );
  }
}

其他页面只需引入globals.dart即可访问该变量。

方案3:状态管理库(适合复杂状态场景)

如果项目已使用状态管理工具(以Provider为例),可按以下步骤实现:

  1. 创建状态管理类:
import 'package:flutter/material.dart';

class DocumentProvider extends ChangeNotifier {
  String? _selectedDocumentedId;

  String? get selectedDocumentedId => _selectedDocumentedId;

  void updateSelectedId(String? id) {
    _selectedDocumentedId = id;
    notifyListeners(); // 通知所有监听页面状态更新
  }
}
  1. 在main.dart中注册Provider:
void main() {
  runApp(
    ChangeNotifierProvider(
      create: (context) => DocumentProvider(),
      child: const MyApp(),
    ),
  );
}
  1. 修改onTap方法更新状态:
class _EeachWorkModelState extends State<EeachWorkModel> {
  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        Provider.of<DocumentProvider>(context, listen: false)
            .updateSelectedId(widget.prolist['doc_id'] as String?);
      },
      // 你的其他Widget代码...
    );
  }
}
  1. 在其他页面获取并监听数据:
@override
Widget build(BuildContext context) {
  String? docId = Provider.of<DocumentProvider>(context).selectedDocumentedId;
  return Text(docId ?? '未选中任何文档');
}

内容的提问来源于stack exchange,提问作者Safnad Graphsol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:35:16