如何将变量从多页传递到一页颤动?

时间:2019-08-03 09:27:19

标签: flutter flutter-layout

在我的Flutter项目中,我有很多页面。我想将变量从不同的页面(命名为目的地,出发地,日期,时间等)传递到一页(命名为homePage)。如何将不同页面的许多变量传递到一页并构造它们?

3 个答案:

答案 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)

  1. 您可以重新进行流和数据管理。 您可以关注此Click here

  2. 您可以共享首选项以在多个屏幕上获取数据。

在您的.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