Как динамически добавлять новые текстовые поля и добавлять их в базу данных с помощью phpmyadmin? - PullRequest
0 голосов
/ 12 мая 2019

Мне нужно добавить значения, введенные в динамически создаваемые текстовые поля, в мою базу данных с помощью phpmyadmin. Использую локальную базу данных. Я не понимаю, как я могу реализовать контроллеры для динамически добавленных полей для передачи данных в файл php. (Правка: я получил добавление полей для работы).

Код ниже:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class AddProject extends StatefulWidget {
  @override
  _AddProject createState() => new _AddProject();
}

class _AddProject extends State<AddProject> {
  List<Widget> listDynamic = new List();
  TextEditingController pnameController = new TextEditingController();
  TextEditingController role1Controller = new TextEditingController();
  TextEditingController role2Controller = new TextEditingController();
  TextEditingController role3Controller = new TextEditingController();
  TextEditingController user1Controller = new TextEditingController();
  TextEditingController user2Controller = new TextEditingController();
  TextEditingController user3Controller = new TextEditingController();

  addDynamic() {
    listDynamic.add(new DynamicWidget());
    setState(() {});
  }

  Future<String> _addProject() async {

    var url = "";

    final response = await http.post(url,
    headers: { "accept": "application/json"},
    body: {
      "pname": pnameController.text,
      "role1": role1Controller.text,
      "role2": role2Controller.text,
      "role3": role3Controller.text,
      "user1": user1Controller.text,
      "user2": user2Controller.text,
      "user3": user3Controller.text,
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("Add Project"),
      ),
      body: Container(
          padding: const EdgeInsets.all(10.0),
          child: ListView(children: <Widget>[
            new Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                new TextField(
                  decoration: new InputDecoration(
                      hintText: "Project Name", labelText: "Project Name"),
                  controller: pnameController,
                ),
                new Container(
                  margin: EdgeInsets.all(10.0),
                  child: Row(
                    children: <Widget>[
                      new Flexible(
                          child: Padding(padding: const EdgeInsets.all(8.0),
                            child: new TextField(
                              decoration:
                              const InputDecoration(helperText: "Enter Role", contentPadding: EdgeInsets.all(8.0)),
                              controller: role1Controller,
                              style: Theme.of(context).textTheme.body1,
                            ),
                          )
                      ),
                      new Flexible(
                        child: Padding(padding: const EdgeInsets.all(8.0),
                            child: new TextField(
                              decoration:
                              const InputDecoration(helperText: "Enter User", contentPadding: EdgeInsets.all(8.0)),
                              controller: user1Controller,
                              style: Theme.of(context).textTheme.body1,
                            )),
                      )
                    ],
                  ),
                ),
                new Container(
                  margin: EdgeInsets.all(10.0),
                  child: Row(
                    children: <Widget>[
                      new Flexible(
                          child: Padding(padding: const EdgeInsets.all(8.0),
                            child: new TextField(
                              decoration:
                              const InputDecoration(helperText: "Enter Role", contentPadding: EdgeInsets.all(8.0)),
                              controller: role2Controller,
                              style: Theme.of(context).textTheme.body1,
                            ),
                          )
                      ),
                      new Flexible(
                        child: Padding(padding: const EdgeInsets.all(8.0),
                            child: new TextField(
                              decoration:
                              const InputDecoration(helperText: "Enter User", contentPadding: EdgeInsets.all(8.0)),
                              controller: user2Controller,
                              style: Theme.of(context).textTheme.body1,
                            )),
                      )
                    ],
                  ),
                ),
                new Container(
                  margin: EdgeInsets.all(10.0),
                  child: Row(
                    children: <Widget>[
                      new Flexible(
                        child: Padding(padding: const EdgeInsets.all(8.0),
                        child: new TextField(
                          decoration:
                          const InputDecoration(helperText: "Enter Role", contentPadding: EdgeInsets.all(8.0)),
                          controller: role3Controller,
                          style: Theme.of(context).textTheme.body1,
                        ),
                        )
                      ),
                      new Flexible(
                          child: Padding(padding: const EdgeInsets.all(8.0),
                          child: new TextField(
                            decoration:
                            const InputDecoration(helperText: "Enter User", contentPadding: EdgeInsets.all(8.0)),
                            controller: user3Controller,
                            style: Theme.of(context).textTheme.body1,
                          )),
                      )
                    ],
                  ),
                ),
                new Flexible(
                    child: new ListView.builder(
                        scrollDirection: Axis.vertical,
                        shrinkWrap: true,
                        itemCount: listDynamic.length,
                        itemBuilder: (_, index) => listDynamic[index])),
                new Container(
                  child: new RaisedButton(
                    onPressed: _addProject,
                    child: new Text('Add Project'),
                  ),
                )
              ],
            ),
          ])),
      floatingActionButton: FloatingActionButton(
        tooltip: 'Add roles',
        child: Icon(Icons.add),
        onPressed: addDynamic,
      ),
    );
  }
}

class DynamicWidget extends StatelessWidget {
  TextEditingController controller = new TextEditingController();
  TextEditingController controller1 = new TextEditingController();

  @override
  Widget build(BuildContext context) {
    return new Container(
      margin: EdgeInsets.all(10.0),
      child: Row(
        children: <Widget>[
          new Flexible(
              child: Padding(padding: const EdgeInsets.all(8.0),
                child: new TextField(
                  decoration:
                  const InputDecoration(helperText: "Enter Role", contentPadding: EdgeInsets.all(8.0)),
                  controller: controller,
                  style: Theme.of(context).textTheme.body1,
                ),
              )
          ),
          new Flexible(
            child: Padding(padding: const EdgeInsets.all(8.0),
                child: new TextField(
                  decoration:
                  const InputDecoration(helperText: "Enter User", contentPadding: EdgeInsets.all(8.0)),
                  controller: controller1,
                  style: Theme.of(context).textTheme.body1,
                )),
          )
        ],
      ),
    );
  }
}

Мне нужно знать, как я могу использовать controller.text и controller1.text, присутствующие в классе DynamicWidget, в функции _addProject ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...