在我的Flutter项目中,我有很多页面。我想将变量从不同的页面(命名为目的地,出发地,日期,时间等)传递到一页(命名为homePage)。如何将不同页面的许多变量传递到一页并构造它们?
答案 0 :(得分:0)
想法#1 一种可能的方法是将它们存储为单例,以便您可以在应用程序中的任何位置访问它们。
您可以更新单例中的值,然后在“主页”中访问它们。
要使用的软件包:https://pub.dev/packages/global_configuration
想法#2 使用数据库存储数据并在“主页”中访问它们。
要使用的包装: https://pub.dev/packages/sqflite
想法#3 将数据存储在共享的首选项中,然后在“主页”中访问它们。
要使用的包装: https://pub.dev/packages/shared_preferences
想法#2和#3是持久性的,这意味着在应用关闭并在任何其他时间重新启动之后,数据才可用。
想法1不能持久存在,并且在关闭应用程序时数据会丢失。
因此,主要思想是将数据存储在某处,以后再访问它们。
答案 1 :(得分:0)
您可以重新进行流和数据管理。 您可以关注此Click here
您可以共享首选项以在多个屏幕上获取数据。
在您的.yaml文件中添加以下代码。 依赖项:
flutter:
sdk: flutter
shared_preferences: ^0.4.3
示例代码:
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(primarySwatch: Colors.blue),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Saving data'),
),
body: Row(
//mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: RaisedButton(
child: Text('Read'),
onPressed: () {
_read();
},
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: RaisedButton(
child: Text('Save'),
onPressed: () {
_save();
},
),
),
],
),
);
}
// Replace these two methods in the examples that follow
_read() async {
final prefs = await SharedPreferences.getInstance();
final key = 'my_int_key';
final value = prefs.getInt(key) ?? 0;
print('read: $value');
}
_save() async {
final prefs = await SharedPreferences.getInstance();
final key = 'my_int_key';
final value = 42;
prefs.setInt(key, value);
print('saved $value');
}
}
答案 2 :(得分:0)
在您的应用程序中包含状态管理库。状态管理库允许您将业务逻辑与UI分开,并且还可以从应用程序的任何部分访问这种状态。 扑扑官方网站列出了几种状态管理方法,您可以选择一种最适合您的方法。参见state management approaches。