Здравствуйте, я новичок здесь, а также все еще учусь трепетать
Я создал список задач, в который вы можете добавлять задачи, а затем долго нажимать их, чтобы удалить элемент
, возможно, возникла некоторая путаница удалил некоторые ненужные страницы из приложения к заданному вопросу
, поэтому, если появится какая-либо ошибка, я могу помочь вам с этим, я хочу сохранить список, который я создал, либо локально на моем телефоне, либо через базу данных (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),
),
),
),
],
),
);
}
}