Dart 使用文本和按钮动态制作卡片

Dart 使用文本和按钮动态制作卡片,dart,flutter,Dart,Flutter,我正在做笔记应用程序。我用文本和按钮动态制作卡片(通过单击按钮创建)。但我在更改当前卡上的文本时遇到问题。例如,我有3张有自己文本和按钮的卡片,我想更改第二张卡片上的文本,但第三张卡片上的文本正在更改。我怎样才能解决这个问题 在过去,我试着制作列表来收集短信,但我不知道如何识别当前的卡 全主飞镖 import 'package:flutter/material.dart'; import './changeTextPage.dart'; int count = 0

我正在做笔记应用程序。我用文本和按钮动态制作卡片(通过单击按钮创建)。但我在更改当前卡上的文本时遇到问题。例如,我有3张有自己文本和按钮的卡片,我想更改第二张卡片上的文本,但第三张卡片上的文本正在更改。我怎样才能解决这个问题

在过去,我试着制作列表来收集短信,但我不知道如何识别当前的卡

全主飞镖

    import 'package:flutter/material.dart';

    import './changeTextPage.dart';

    int count = 0;
    String titlecard = '';
    String textcard = '';

    void main() => runApp(MyApp());

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Notes',
          theme: ThemeData(
            primarySwatch: Colors.deepPurple
          ),
          home: HomePage(title: 'Notes',),
        );
      }
    }

    class HomePage extends StatefulWidget {
      HomePage({Key key, this.title}) : super(key: key);
      final title;
      @override
      HomePageState createState() => HomePageState();
    }

    class HomePageState extends State<HomePage> {

      @override
      Widget build(BuildContext context) {
        List<Widget> cards = new List.generate(count, (int i) => new MyCard());

        return Scaffold(
          appBar: AppBar(
            title: Text('Notes'),
          ),
          body: LayoutBuilder(
            builder: (context, constraint) {
            return Column(
              children: <Widget>[
                Container(
                  height: 650.0,
                  child: new ListView(
                    children: cards,
                    scrollDirection: Axis.vertical,
                  ),
                ),
              ],
            );
          }
          ),
          floatingActionButton: FloatingActionButton(
            child: Icon(Icons.add),
            onPressed: () {
              setState(() {
                Navigator.push(context, MaterialPageRoute(
                    builder: (context) => changeText())
                );

              });
            },
          ),
        );
      }
    }

    class MyCard extends StatefulWidget {
      @override
      myCard createState() => myCard();
    }

    class myCard extends State<MyCard> {
      int myCount = count;

      void click() {
        setState(() {
          Navigator.push(context, MaterialPageRoute(
              builder: (context) => setNewText())
          );
        });

      }


      @override
      Widget build(BuildContext context) {
        return Center(
          child: Card(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                  ListTile(
                  leading: Icon(Icons.album),
                  title: Text(titlecard),
                  subtitle: Text(textcard),
                ),
                ButtonTheme.bar( // make buttons use the appropriate styles for cards
                  child: ButtonBar(
                    children: <Widget>[
                      FlatButton(
                        child: const Text('Change Text'),
                        onPressed: click,
                      ),
                      FlatButton(
                        child: const Text('LISTEN'),
                        onPressed: () { /* ... */ },
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        );
      }


    }

    class setNewText extends StatefulWidget {
      @override
      SetNewText createState() => SetNewText();
    }

    class SetNewText extends State<setNewText> {
      final titleController = TextEditingController();
      final textController = TextEditingController();
      final formkey = GlobalKey<FormState>();

      void _submit() {
        setState(() {
          if (formkey.currentState.validate()) {
            formkey.currentState.save();
            Navigator.pop(context);
            titlecard = titleController.text;
            textcard = textController.text;

          }
        });

      }

      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(
              title: Text('Change Title'),
            ),
            body: Column(
              children: <Widget>[
                Card(
                  child: Padding(
                    padding: EdgeInsets.all(2.0),
                    child: Form(
                      key: formkey,
                      child: Column(
                        children: <Widget>[
                          TextFormField(
                            controller: titleController,
                            decoration: InputDecoration(
                                labelText: 'Title'
                            ),
                            validator: (value) => value.length < 1 ? 'Invalid Title' : null,
                            onSaved: (value) => value = titleController.text,
                          ),
                          TextFormField(
                            controller: textController,
                            decoration: InputDecoration(
                                labelText: 'Text'
                            ),
                            validator: (text) => text.length < 1 ? 'Invalid Text' : null,
                            onSaved: (text) => text = textController.text,
                          )
                        ],
                      ),
                    ),
                  ),
                ),
                FlatButton(
                  textColor: Colors.deepPurple,
                  child: Text('SUBMIT'),
                  onPressed: _submit,
                ),
              ],
            )
        );
      }


    }
导入“包装:颤振/材料.省道”;
导入“./changeTextPage.dart”;
整数计数=0;
字符串标题卡=“”;
字符串textcard='';
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:‘注释’,
主题:主题数据(
原始样本:颜色。深紫色
),
主页:主页(标题:“注释”),
);
}
}
类主页扩展了StatefulWidget{
主页({Key,this.title}):超级(Key:Key);
最终标题;
@凌驾
HomePageState createState()=>HomePageState();
}
类HomePageState扩展了状态{
@凌驾
小部件构建(构建上下文){
列表卡=新列表。生成(计数,(int i)=>new MyCard());
返回脚手架(
appBar:appBar(
标题:文本(“注释”),
),
正文:布局生成器(
生成器:(上下文,约束){
返回列(
儿童:[
容器(
身高:650.0,
子:新列表视图(
孩子们:卡片,
滚动方向:轴垂直,
),
),
],
);
}
),
浮动操作按钮:浮动操作按钮(
子:图标(Icons.add),
已按下:(){
设置状态(){
Navigator.push(上下文、MaterialPage路由)(
生成器:(上下文)=>changeText()
);
});
},
),
);
}
}
类MyCard扩展了StatefulWidget{
@凌驾
myCard createState()=>myCard();
}
类myCard扩展状态{
int myCount=计数;
无效单击(){
设置状态(){
Navigator.push(上下文、MaterialPage路由)(
生成器:(上下文)=>setNewText()
);
});
}
@凌驾
小部件构建(构建上下文){
返回中心(
孩子:卡片(
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
列表砖(
前导:图标(Icons.album),
标题:文本(标题卡),
字幕:文本(文本卡),
),
ButtonTheme.bar(//使按钮对卡片使用适当的样式
孩子:巴顿巴(
儿童:[
扁平按钮(
子项:常量文本(“更改文本”),
按下:单击,
),
扁平按钮(
child:const Text('LISTEN'),
按下:(){/*…*/},
),
],
),
),
],
),
),
);
}
}
类setNewText扩展StatefulWidget{
@凌驾
SetNewText createState()=>SetNewText();
}
类SetNewText扩展了状态{
最终标题控制器=文本编辑控制器();
final textController=TextEditingController();
final formkey=GlobalKey();
作废(提交){
设置状态(){
if(formkey.currentState.validate()){
formkey.currentState.save();
Navigator.pop(上下文);
titlecard=titleController.text;
textcard=textController.text;
}
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“更改标题”),
),
正文:专栏(
儿童:[
卡片(
孩子:填充(
填充:所有边缘设置(2.0),
孩子:表格(
key:formkey,
子:列(
儿童:[
TextFormField(
控制器:标题控制器,
装饰:输入装饰(
标签文字:“标题”
),
验证程序:(value)=>value.length<1?“无效标题”:null,
onSaved:(value)=>value=titleController.text,
),
TextFormField(
控制器:textController,
装饰:输入装饰(
labelText:“文本”
),
验证程序:(text)=>text.length<1?“无效文本”:null,
onSaved:(text)=>text=textController.text,
)
],
),
),
),
),
扁平按钮(
textColor:Colors.deepPurple,
子项:文本('SUBMIT'),
按下按钮:_提交,
),
],
)
);
}
}
changeTextPage.dart

    import 'package:flutter/material.dart';
    import './main.dart';

    class changeText extends StatefulWidget {
      @override
      ChangeText createState() => ChangeText();
    }

    class ChangeText extends State<changeText> {
      myCard s = myCard();
      final titleController = TextEditingController();
      final textController = TextEditingController();
      final formkey = GlobalKey<FormState>();

      void _submit() {
        setState(() {
          if (formkey.currentState.validate()) {
            formkey.currentState.save();
            Navigator.pop(context);
            count++;
            titlecard = titleController.text;
            textcard = textController.text;
          }
        });

      }

      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Change Title'),
          ),
          body: Column(
            children: <Widget>[
              Card(
                child: Padding(
                  padding: EdgeInsets.all(2.0),
                  child: Form(
                    key: formkey,
                    child: Column(
                        children: <Widget>[
                          TextFormField(
                            controller: titleController,
                            decoration: InputDecoration(
                              labelText: 'Title'
                            ),
                            validator: (value) => value.length < 1 ? 'Invalid Title' : null,
                            onSaved: (value) => value = titleController.text,
                          ),
                          TextFormField(
                            controller: textController,
                            decoration: InputDecoration(
                                labelText: 'Text'
                            ),
                            validator: (text) => text.length < 1 ? 'Invalid Text' : null,
                            onSaved: (text) => text = textController.text,
                          )
                        ],
                      ),
                  ),
                  ),
                ),
              FlatButton(
                textColor: Colors.deepPurple,
                child: Text('SUBMIT'),
                onPressed: _submit,
              ),
            ],
          )
        );
      }


    }
导入“包装:颤振/材料.省道”;
导入“/main.dart”;
类changeText扩展Stat
class Note {
    String title;
    String text;

    Note(this.title, this.text);
}

class HomePageState extends State<HomePage> {
  List<Note> _notes = [Note('Test', 'Some test note')];

  @override
  Widget build(BuildContext context) {
    ListView cards = ListView.builder(
        itemCount: _notes.length,
        itemBuilder: (context, index) => MyCard(
            title: _notes[index].title,
            text: _notes[index].text,
            onEdit: (title, text) => setState(() { // We'll get back to that later
                _notes[index].title = title;
                _notes[index].text = text;
            })
        ));
// (...)