Hive中如何跨屏幕传递records变量?
在Hive场景下跨屏幕传递
records变量的实现方案 这里提供两种实用方案,根据你的使用场景选择:
方案一:路由直接传参(临时传递首选)
如果records只是临时在两个屏幕间传递,不需要持久化,直接通过路由携带参数最直接:
- 发起跳转的屏幕(如ScreenA):
Navigator.push( context, MaterialPageRoute( builder: (context) => ScreenB(records: records), ), );
- 接收参数的屏幕(如ScreenB):
class ScreenB extends StatelessWidget { // 根据实际类型定义,比如List<RecordModel> final List<dynamic> records; const ScreenB({super.key, required this.records}); @override Widget build(BuildContext context) { // 直接使用传入的records变量 return Scaffold( body: Center(child: Text('共${records.length}条记录')), ); } }
方案二:利用Hive全局共享数据(持久化/多屏访问首选)
如果需要records在多个屏幕全局访问,或者需要持久化存储,利用Hive的全局盒子特性实现:
- 确保Hive初始化完成(通常在main函数中):
void main() async { await Hive.initFlutter(); // 若records是自定义对象,需先注册对应的Adapter // Hive.registerAdapter(RecordAdapter()); await Hive.openBox('recordsBox'); runApp(const MyApp()); }
- 在源屏幕存储records:
final recordsBox = Hive.box('recordsBox'); // 将records存入Hive盒子 recordsBox.put('savedRecords', records);
- 在目标屏幕读取records:
final recordsBox = Hive.box('recordsBox'); // 读取并转换为对应类型,比如List<RecordModel> final records = recordsBox.get('savedRecords') as List<dynamic>;
注意事项
- 路由传参适合一次性临时传递,无需额外存储操作
- Hive存储适合需要持久化或多屏幕共享的场景,自定义对象必须提前注册Adapter
- 使用后若无需保留数据,可调用
recordsBox.delete('savedRecords')清理
内容的提问来源于stack exchange,提问作者user19196093
相关产品推荐
相关产品推荐

