ищет способ сохранить элементы списка задач на устройстве или в базе данных во Flutter - PullRequest
0 голосов
/ 17 февраля 2020

Здравствуйте, я новичок здесь, а также все еще учусь трепетать

Я создал список задач, в который вы можете добавлять задачи, а затем долго нажимать их, чтобы удалить элемент

, возможно, возникла некоторая путаница удалил некоторые ненужные страницы из приложения к заданному вопросу

, поэтому, если появится какая-либо ошибка, я могу помочь вам с этим, я хочу сохранить список, который я создал, либо локально на моем телефоне, либо через базу данных (Man go db)

и спасибо за помощь

import 'dart:async';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:flutter/material.dart';

void main() => runApp(new TodoApp());


class TodoApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Todo List',
      home: new TodoList(),

      debugShowCheckedModeBanner: false,
    );
  }
}



class TodoList extends StatefulWidget {


  @override
  createState() => new TodoListState();
}





class TodoListState extends State<TodoList> {
  List<String> _todoItems = [];
  int _counter;
  Future<File> _incrementCounter() {
    setState(() {
      _counter++;
    });


  }
  void _addTodoItem(String task) {
    if(task.length > 0) {

      setState(() => _todoItems.add(task));
    }
  }

  void _removeTodoItem(int index) {
    setState(() => _todoItems.removeAt(index));
  }

  void _promptRemoveTodoItem(int index) {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return new AlertDialog(
          title: new Text('Mark "${_todoItems[index]}" as done?'),
          actions: <Widget>[
            new FlatButton(
              child: new Text('CANCEL'),
          onPressed: () => Navigator.of(context).pop()
        ),
        new FlatButton(
          child: new Text('MARK AS DONE'),
          onPressed: () {
            _removeTodoItem(index);
            Navigator.of(context).pop();
              }
            )
          ]
        );
      }
    );
  }

  Widget _buildTodoList() {
    return new ListView.builder(
      itemBuilder: (context, index) {

        if(index < _todoItems.length) {
          return _buildTodoItem(_todoItems[index], index);
        }
      },
    );
  }

  Widget _buildTodoItem(String todoText, int index) {
    return new ListTile(
      title: new Text(todoText),
      onLongPress: () => _promptRemoveTodoItem(index)
    );
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('Test List')
      ),
      drawer: Drawer(
        child: ListView(
      padding: EdgeInsets.zero,

      children:  <Widget>[
     Container(
       height: 88, 

       child: DrawerHeader(
      decoration: BoxDecoration(
        color: Colors.blue,


      ),




        child: Text(
        'options',
        style: TextStyle(
          color: Colors.black,
          fontSize: 28,
        ),
        textAlign: TextAlign.center,

      ),

    ),
    ),

    ListTile(
      leading: Icon(Icons.message),
      title: Text('inbox'),
      subtitle: Text('A sub test'),


    ),
    ListTile(
      leading: Icon(Icons.account_circle),
      title: Text('tasks'),
      subtitle: Text('A sub test'),

    ),
    ListTile(
      leading: Icon(Icons.settings),
      title: Text('Settings'),
      subtitle: Text('A sub test'),

    ),
  ],
),
  ),
      body: _buildTodoList(),
      floatingActionButton: new FloatingActionButton(
        onPressed: _pushAddTodoScreen,
        tooltip: 'Add task',
        child: new Icon(Icons.add)
      ),
    );
  }

  void _pushAddTodoScreen() {

Navigator.of(context).push(

  new MaterialPageRoute(
    builder: (context) {
      return new Scaffold(
        appBar: new AppBar(
          title: new Text('Add a new task')
        ),
        body:  TextField(
          autofocus: true,

          onSubmitted: (val) {
            _addTodoItem(val);
            Navigator.pop(context); // Close the add todo screen
          },
          decoration: new InputDecoration(
            hintText: 'Enter something to do...',
            contentPadding: const EdgeInsets.all(16.0)
          ),
        )

      );
    }
      )
    );
  }
}

class ThirdPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new ThirdPageState();
  }
}

class ThirdPageState extends State<ThirdPage> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("New Task"),
        actions: <Widget>[
          new IconButton(icon: const Icon(Icons.save), onPressed: () {


          })
        ],
      ),
      body: new Column(
        children: <Widget>[
          new ListTile(
            leading: const Icon(Icons.person),
            title: new TextField(
              decoration: new InputDecoration(
                hintText: "Task Name",
                contentPadding: const EdgeInsets.all(15.0),
              ),
            ),
          ),
      new ListTile(
        leading: const Icon(Icons.person),
        title: new TextField(
          decoration: new InputDecoration(
              hintText: "Responsable",
              contentPadding: const EdgeInsets.all(15.0)),
          keyboardType: TextInputType.phone,
          maxLength: 10,
        ),
      ),
      new ListTile(
        leading: const Icon(Icons.email),
        title: new TextField(
          decoration: new InputDecoration(
            hintText: "GroupName",
            contentPadding: const EdgeInsets.all(15.0),
          ),
        ),
      ),
        new ListTile(
          leading: const Icon(Icons.email),
          title: new TextField(
            decoration: new InputDecoration(
              hintText: "Project",
              contentPadding: const EdgeInsets.all(15.0),
            ),
          ),
        ),

      ],
    ),
  );
}

}
...