在不稳定的应用程序中保留数据 [英] Persisting data in a flutter application

查看:65
本文介绍了在不稳定的应用程序中保留数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个应用程序,并且在其中有可以添加/删除列表的人员名称,等等.问题是关闭应用程序时不会保存此列表,这很不方便.

I am building an app and in it, I have the names of people in a list from which I could add/delete, etc.. The problem is this list is not saved when I close the app, which is inconvenient.

我听说您可以使用共享的首选项"来保存这样的简单对象,而不会像使用SQLite和json那样使事情复杂化.

I heard you can use shared Preferences to save simple objects like this, without complicating things like using SQLite and json.

所以我想知道建议什么样的方式来保存这些数据并加载等等.

So I'd like to know what's the suggested way to persist this data and load it etc.

谢谢你,祝你有美好的一天:)

Thanks in Advance and have a great day :)

这是代码:

import 'package:flutter/material.dart';
import 'package:zakif_yomi3/NewPerson.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.purple,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  final List<String> people = [];

  void _addNewPerson(String name) {
    setState(() {
      people.add(name);
    });
  }

  void _startAddNewPerson(BuildContext ctx) {
    showModalBottomSheet(
      context: ctx,
      builder: (_) {
        return GestureDetector(
          onTap: () {},
          child: NewPerson(_addNewPerson),
          behavior: HitTestBehavior.opaque,
        );
      },
    );
  }
void _deletePerson(int value  ) {

    setState(() {
      people.removeAt(value);
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text(
          'People',
          style: TextStyle(fontSize: 30),
        ),
        actions: <Widget>[
          IconButton(
            icon: Icon(Icons.add),
            onPressed: () => _startAddNewPerson(context),
          )
        ],
      ),
      body: ListView.builder(
        itemCount: this.people.length,
        itemBuilder: (context, value) {
          return Card(
            color: Colors.amberAccent[200],
            elevation: 3,
            child: Container(
              child: ListTile(
                leading: Text(value.toString()),
                title: Text(
                  people[value],
                ),
                trailing: IconButton(
                  icon: Icon(Icons.delete),
                  onPressed: () {
                    _deletePerson(value);
                  },
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

还有NewPerson对象:

And the NewPerson object:

import 'package:flutter/material.dart';


class NewPerson extends StatefulWidget {
  final Function addTx;

  NewPerson(this.addTx);

  @override
  _NewPersonState createState() => _NewPersonState();
}

class _NewPersonState extends State<NewPerson> {
  final _nameController = TextEditingController();



  void _submitData() {

    final name = _nameController.text;


    widget.addTx(
     name
    );

    Navigator.of(context).pop();
  }



  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 5,
      child: Container(
        padding: EdgeInsets.all(10),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.end,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(labelText: 'Name'),
              controller: _nameController,
              onSubmitted: (_) => _submitData(),

            ),


            RaisedButton(
              child: Text('Add Person'),
              color: Theme.of(context).primaryColor,
              textColor: Theme.of(context).textTheme.button.color,
              onPressed: _submitData,
            ),
          ],
        ),
      ),
    );
  }
}

推荐答案

您可以使用此功能保留和加载共享首选项中的数据.

You could use this functions to persist and load data from shared preferences.

此处获取SharedPreferences.

Get SharedPreferences from here.

要将数据持久保存到SharedPreferences中,这是在向列表中添加或删除新元素之后调用的.

To persist data to SharedPreferences, called after adding or deleting a new element to the list.

_persistData() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    await preferences.setStringList("persons", _people);
  }

要从通常在 initState 中调用的SharedPreferences中加载数据.

To load data from SharedPreferences, usually called in initState.

_loadData() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    setState(() {
      _people = preferences.getStringList("persons");
    });
  }

这篇关于在不稳定的应用程序中保留数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆