diff --git a/lib/main.dart b/lib/main.dart index 30aa948..fadbee0 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,23 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:workshop_task/screen/todo_screen.dart'; void main() { - runApp(const MyApp()); -} - -class MyApp extends StatelessWidget { - const MyApp({Key key}) : super(key: key); - - // This widget is the root of your application. - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - // is not restarted. - primarySwatch: Colors.blue, - ), - //GO to correct screen. - home: Container(), - ); - } + runApp(const MaterialApp( + home: TodoScreen(), + )); } diff --git a/lib/models/todo_list.dart b/lib/models/todo_list.dart index c7c3b03..11a5652 100644 --- a/lib/models/todo_list.dart +++ b/lib/models/todo_list.dart @@ -1,17 +1,17 @@ import 'package:workshop_task/models/todo.dart'; class TodoList { - final List _allTodos = []; + final List _allTodos = []; List allTodos() { - //TODO:Add logic to complete + return _allTodos; } void addTodo(Todo todo) { - //TODO:Add logic to add a todo + _allTodos.add(todo); } void deleteTodo(Todo todo) { - //TODO:Add logic to delete todo + _allTodos.remove(todo); } } diff --git a/lib/screen/todo_screen.dart b/lib/screen/todo_screen.dart index 70caa8b..f29fd26 100644 --- a/lib/screen/todo_screen.dart +++ b/lib/screen/todo_screen.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:workshop_task/models/todo.dart'; import 'package:workshop_task/models/todo_list.dart'; +import 'package:workshop_task/widgets/add_todo_dialogue.dart'; +import 'package:workshop_task/widgets/todo_list_item.dart'; class TodoScreen extends StatefulWidget { const TodoScreen({Key key}) : super(key: key); @@ -9,18 +12,80 @@ class TodoScreen extends StatefulWidget { } class _TodoScreenState extends State { - TodoList todoList = TodoList(); + final TextEditingController titlecontroller = TextEditingController(); + final TextEditingController desccontroller = TextEditingController(); + + TodoList doList = TodoList(); + Widget wigbody = Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: const [ + Center( + child: Text("No Todos Added"), + ) + ], + ); @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - title: const Text("Your Todos"), - ), - //TODO: Add todo button with this icon => "+". - floatingActionButton: const FloatingActionButton(), - body: //TODO: Add list view displaying all todo. - Container(), - ); + appBar: AppBar( + title: const Text("Your Todos"), + ), + floatingActionButton: FloatingActionButton( + child: const Icon(Icons.add), + onPressed: () { + showDialog( + context: context, + builder: (BuildContext context) { + return const AddTodoDialogue(); + }).then((value) { + setState(() { + { + doList.addTodo(value); + } + }); + }); + }), + body: doList.allTodos().isEmpty + ? wigbody + : ListView.builder( + itemBuilder: (context, index) { + return GestureDetector( + onDoubleTap: () { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + content: const Text( + "Are you sure you want to delete this todo"), + actions: [ + TextButton( + onPressed: () { + Todo content = doList.allTodos()[index]; + Navigator.pop(context, content); + }, + child: const Text("Yes")), + TextButton( + onPressed: () { + Navigator.pop(context); + }, + child: const Text("No")) + ], + ); + }).then((value) { + setState(() { + doList.deleteTodo(value); + }); + }); + }, + child: TodoListItem( + index: index + 1, + todo: doList.allTodos()[index], + ), + ); + }, + itemCount: doList.allTodos().length, + )); } } diff --git a/lib/widgets/add_todo_dialogue.dart b/lib/widgets/add_todo_dialogue.dart index 29ccd08..b700139 100644 --- a/lib/widgets/add_todo_dialogue.dart +++ b/lib/widgets/add_todo_dialogue.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:workshop_task/models/todo_list.dart'; +import 'package:workshop_task/models/todo.dart'; class AddTodoDialogue extends StatefulWidget { const AddTodoDialogue({Key key}) : super(key: key); @@ -8,20 +10,48 @@ class AddTodoDialogue extends StatefulWidget { } class _AddTodoDialogueState extends State { + final TextEditingController titlecontroller = TextEditingController(); + final TextEditingController desccontroller = TextEditingController(); + int i = 0; + TodoList listItem = TodoList(); + List lisWig = []; @override Widget build(BuildContext context) { - return Container( - width: 200, - padding: const EdgeInsets.all(16), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - //TODO: Take input of title. and description. - TextField(), - TextField(), - TextButton(), - ], - ), - ); + return Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(2.0)), + child: SizedBox( + height: 200, + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + TextField( + controller: titlecontroller, + decoration: const InputDecoration(labelText: "Title"), + ), + TextField( + controller: desccontroller, + decoration: + const InputDecoration(labelText: "Description"), + ), + TextButton( + onPressed: () { + setState(() { + if (titlecontroller.text.isNotEmpty && + desccontroller.text.isNotEmpty) { + Todo content = Todo( + title: titlecontroller.text, + description: desccontroller.text); + + titlecontroller.clear(); + desccontroller.clear(); + Navigator.pop(context, content); + } + }); + }, + child: const Text("Submit")) + ])))); } } diff --git a/lib/widgets/todo_list_item.dart b/lib/widgets/todo_list_item.dart index fe8536f..83d4217 100644 --- a/lib/widgets/todo_list_item.dart +++ b/lib/widgets/todo_list_item.dart @@ -8,7 +8,12 @@ class TodoListItem extends StatelessWidget { @override Widget build(BuildContext context) { - //TODO: display title and description of todo. - return Container(); + return ListTile( + title: Text(todo.title), + subtitle: Text(todo.description), + leading: CircleAvatar( + child: Text("$index"), + ), + ); } }