Arrays 如何使用按钮将项目添加到动态列表中,并将其添加到具有该列表的另一个屏幕?

Arrays 如何使用按钮将项目添加到动态列表中,并将其添加到具有该列表的另一个屏幕?,arrays,flutter,listview,dart,sharedpreferences,Arrays,Flutter,Listview,Dart,Sharedpreferences,一般来说,我还不太熟悉颤振和编码。我也是新来的,所以我为我在发布问题时可能犯的任何错误道歉。另外,如果需要,我会使用android studio。为了更具描述性,我想使用SharedReferences将从1屏幕的4个文本字段中获取的数据保存为数组,并将它们添加到2屏幕的列表中。一个还没有任何内容的列表,如果保存了第一个屏幕上的数据,则该列表将显示一个包含已保存数据的项目下面是我的混乱代码: import 'package:flutter/material.dart'; import 'pack

一般来说,我还不太熟悉颤振和编码。我也是新来的,所以我为我在发布问题时可能犯的任何错误道歉。另外,如果需要,我会使用android studio。
为了更具描述性,我想使用SharedReferences将从1屏幕的4个文本字段中获取的数据保存为数组,并将它们添加到2屏幕的列表中。一个还没有任何内容的列表,如果保存了第一个屏幕上的数据,则该列表将显示一个包含已保存数据的项目
下面是我的混乱代码:

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter/services.dart';
import 'package:provider/provider.dart';

class ListProvider extends ChangeNotifier {
  List<String> litems = List<String>();

  List<String> get Items =>
      this.litems;

  set logList(List<String> value) {
    litems = value;
    notifyListeners();
  }
}
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(

        primarySwatch: Colors.blue,
      ),
      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> with ChangeNotifier {
  TextEditingController firstname = TextEditingController();
  TextEditingController lastname = TextEditingController();
  TextEditingController birthday = TextEditingController();
  TextEditingController address = TextEditingController();
  //


  String data = "";
  String data1 = "";
  String data2 = "";
  String data3 = "";
  String firstname1 = "f";
  String lastname1 = "l";
  String birthday1 = "";
  String address1 = "";



  Future<bool>saveData() async{
    SharedPreferences preferences = await SharedPreferences.getInstance();
    return await preferences.setString(firstname1, firstname.text);
  }
  Future<bool>saveData1() async{
    SharedPreferences preferences1 = await SharedPreferences.getInstance();
    return await preferences1.setString(lastname1, lastname.text);
  }
  Future<bool>saveData2() async{
    SharedPreferences preferences = await SharedPreferences.getInstance();
    return await preferences.setString(birthday1, birthday.text);
  }
  Future<bool>saveData3() async{
    SharedPreferences preferences1 = await SharedPreferences.getInstance();
    return await preferences1.setString(address1, address.text);
  }

///////////

  Future<String> loadData() async{
    SharedPreferences preferences = await SharedPreferences.getInstance();
    return preferences.getString(firstname1);
  }
  Future<String> loadData1() async{
    SharedPreferences preferences2 = await SharedPreferences.getInstance();
    return preferences2.getString(lastname1);
  }
  Future<String> loadData2() async{
    SharedPreferences preferences = await SharedPreferences.getInstance();
    return preferences.getString(birthday1);
  }
  Future<String> loadData3() async{
    SharedPreferences preferences2 = await SharedPreferences.getInstance();
    return preferences2.getString(address1);
  }


  setData(){
    loadData().then((value){
      setState(() {
        data = value;
      });
    });
  }
  setData1(){
    loadData1().then((value){
      setState(() {
        data1 = value;
      });
    });
  }
  setData2(){
    loadData2().then((value){
      setState(() {
        data2 = value;
      });
    });
  }
  setData3(){
    loadData3().then((value){
      setState(() {
        data3 = value;

      });
    });
  }

  add(screen2){
    screen2.litems.add(data);
    notifyListeners();
    setState(() {

    });
  }




  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: <Widget>[
            TextField(
              controller: firstname,
              decoration: InputDecoration(
                  hintText: "FIRST NAME"
              ),
            ),
            TextField(
              controller: lastname,
              decoration: InputDecoration(
                  hintText: "LAST NAME"
              ),
            ),
            TextField(
              controller: birthday,
              decoration: InputDecoration(
                  hintText: "BIRTHDAY"
              ),
            ),
            TextField(
              controller: address,
              decoration: InputDecoration(
                  hintText: "ADDRESS"
              ),
            ),
            RaisedButton(
              onPressed: (){
                saveData();
                saveData1();
                saveData2();
                saveData3();
                setData();
                setData1();
                setData2();
                setData3();
                add(screen2());
              },
              child: Text("ADD"),
            ),
            RaisedButton(
              onPressed: (){
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => screen2()),
                );
              },
              child: Text("SHOW ALL"),
            ),
          ],
        ),
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
导入“package:shared_preferences/shared_preferences.dart”;
导入“包:flifter/services.dart”;
导入“包:provider/provider.dart”;
类ListProvider扩展了ChangeNotifier{
List litems=List();
列表获取项目=>
这是我的看法;
设置日志列表(列表值){
litems=值;
notifyListeners();
}
}
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState使用ChangeNotifier扩展状态{
TextEditingController firstname=TextEditingController();
TextEditingController lastname=TextEditingController();
TextEditingController生日=TextEditingController();
TextEditingController地址=TextEditingController();
//
字符串数据=”;
字符串data1=“”;
字符串data2=“”;
字符串data3=“”;
字符串firstname1=“f”;
字符串lastname1=“l”;
字符串birthday1=“”;
字符串地址1=“”;
FuturesaveData()异步{
SharedReferences首选项=等待SharedReferences.getInstance();
return wait preferences.setString(firstname1,firstname.text);
}
FuturesaveData1()异步{
SharedReferences preferences1=等待SharedReferences.getInstance();
return wait preferences1.setString(lastname1,lastname.text);
}
FuturesaveData2()异步{
SharedReferences首选项=等待SharedReferences.getInstance();
return wait preferences.setString(birthday1,birthday.text);
}
FuturesaveData3()异步{
SharedReferences preferences1=等待SharedReferences.getInstance();
return wait preferences1.setString(address1,address.text);
}
///////////
Future loadData()异步{
SharedReferences首选项=等待SharedReferences.getInstance();
返回preferences.getString(firstname1);
}
Future loadData1()异步{
SharedReferences preferences2=等待SharedReferences.getInstance();
返回首选项2.getString(lastname1);
}
Future loadData2()异步{
SharedReferences首选项=等待SharedReferences.getInstance();
返回preferences.getString(birthday1);
}
Future loadData3()异步{
SharedReferences preferences2=等待SharedReferences.getInstance();
返回首选项2.getString(address1);
}
setData(){
loadData()。然后((值){
设置状态(){
数据=价值;
});
});
}
setData1(){
loadData1()。然后((值){
设置状态(){
数据1=数值;
});
});
}
setData2(){
loadData2()。然后((值){
设置状态(){
数据2=数值;
});
});
}
setData3(){
loadData3()。然后((值){
设置状态(){
数据3=数值;
});
});
}
添加(屏幕2){
屏幕2.litems.add(数据);
notifyListeners();
设置状态(){
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.spaceAround,
儿童:[
文本字段(
控制员:名字,
装饰:输入装饰(
hintText:“名字”
),
),
文本字段(
控制器:姓氏,
装饰:输入装饰(
hintText:“姓氏”
),
),
文本字段(
控制员:生日,
装饰:输入装饰(
hintText:“生日”
),
),
文本字段(
控制器:地址,
装饰:输入装饰(
hintText:“地址”
),
),
升起的按钮(
已按下:(){
saveData();
saveData1();
saveData2();
saveData3();
setData();
setData1();
setData2();
setData3();
添加(屏幕2());
},
子项:文本(“添加”),
),
升起的按钮(
已按下:(){
导航器。推(
上下文
MaterialPackageRoute(生成器:(上下文)=>screen2()),
);
},
子项:文本(“全部显示”),
),
],
),
),
);
}
}

这是我需要从中访问列表的第二个屏幕。 代码段取自

class screen2扩展了StatefulWidget{
@凌驾
State createState()=>新建动态列表();
}
类DyanmicList使用ChangeNotifier扩展状态{
列表文字=[];
final TextEditingController eCtrl=新的TextEditingController();
@凌驾
小部件构建(BuildContext-ctxt){
归还新脚手架(
appBar:新appBar(标题:
    class screen2 extends StatefulWidget {
      @override
      State createState() => new DyanmicList();
    }

    class DyanmicList extends State<screen2> with ChangeNotifier {
      List<String> litems = [];




      final TextEditingController eCtrl = new TextEditingController();
      @override
      Widget build (BuildContext ctxt) {
        return new Scaffold(
            appBar: new AppBar(title: new Text("Screen2"),),
            body: new Column(
              children: <Widget>[
                new TextField(
                  controller: eCtrl,
                  onSubmitted: (text) {
                    litems.add(text);
                    eCtrl.clear();
                    setState(() {});
                  },
                ),
                new Expanded(
                    child: new ListView.builder
                      (
                        itemCount: litems.length,
                        itemBuilder: (BuildContext ctxt, int Index) {
                          return new Text(litems[Index]);
                        }
                    )
                )
              ],
            )
        );
      }
    }

var list = List<Info>();
        ...
list.add(Info(firstName,lastName,birthday,address));
prefs.storeList(json.encode(list));
class Info {
  String firstName;
  String lastName;
  String birthday;
  String address;

  Info(this.firstName, this.lastName,this.birthday,this.address);
}
     Future storeList(String info) async {
        SharedPreferences prefs = await SharedPreferences.getInstance();
        prefs.setString(INFO, info);
      }
    
   Future getListFromSharedPreferences() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getString(INFO);
  }
 FutureBuilder(
        future: sharedPreferences.getListFromSharedPreferences(),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return ListView.builder(
                itemCount: (jsonDecode(snapshot.data)).length,
                itemBuilder: (BuildContext ctxt, int index) {
                  return new Text(jsonDecode(snapshot.data)[index]);
                });
          } else {
            return Text("No data");
          }
        });
RaisedButton(
      onPressed: (){
         List<String> _userData = [];
        _userData.add(firstname.text);
        _userData.add(lastname.text);
        _userData.add(birthday.text);
        _userData.add(address.text);
               
        SharedPreferences myPrefs = await SharedPreferences.getInstance();
        myPrefs.setStringList("user", _userData);
              },
       child: Text("ADD"),
class screen2 extends StatefulWidget {
      @override
      State createState() => new DyanmicList();
    }

    class DyanmicList extends State<screen2> {
      List<String> litems = [];



   @override
void initState() {
    super.initState();
    getUser();
   }

getUser() async{
SharedPreferences myPrefs = await SharedPreferences.getInstance();
var userData=  myPrefs.getStringList("user");
setState((){
litems = userData;
});
}

      final TextEditingController eCtrl = new TextEditingController();
      @override
      Widget build (BuildContext ctxt) {
        return new Scaffold(
            appBar: new AppBar(title: new Text("Screen2"),),
            body: new Column(
              children: <Widget>[
                new TextField(
                  controller: eCtrl,
                  onSubmitted: (text) {
                    litems.add(text);
                    eCtrl.clear();
                    setState(() {});
                  },
                ),
                new Expanded(
                    child: new ListView.builder
                      (
                        itemCount: litems.length,
                        itemBuilder: (BuildContext ctxt, int Index) {
                          return new Text(litems[Index]);
                        }
                    )
                )
              ],
            )
        );
      }
    }