send data controller to provider
import 'package:flutter/material.dart';
import 'model.dart';
class TaskProvider extends ChangeNotifier {
List<Task> _tasks = [];
List<Task> get tasks => _tasks;
// Create operation
void addTask(Task task) {
_tasks.add(task);
notifyListeners();
}
// Read operation (already accessible via getter tasks)
// Update operation
void updateTask(Task task) {
// Find the task in the list and update it
int index = _tasks.indexWhere((t) => t.id == task.id);
if (index != -1) {
_tasks[index] = task;
notifyListeners();
}
}
// Delete operation
void deleteTask(String id) {
_tasks.removeWhere((task) => task.id == id);
notifyListeners();
}
}
class Task {
String id;
String title;
bool completed;
Task({required this.id, required this.title, this.completed = false});
}
import 'package:crudu/taskprovider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'model.dart';
class TaskListScreen extends StatefulWidget {
@override
_TaskListScreenState createState() => _TaskListScreenState();
}
class _TaskListScreenState extends State<TaskListScreen> {
TextEditingController _titleController = TextEditingController();
Task? _selectedTask;
@override
Widget build(BuildContext context) {
var taskProvider = Provider.of<TaskProvider>(context);
return Scaffold(
appBar: AppBar(
title: Text('Task List'),
),
body: ListView.builder(
itemCount: taskProvider.tasks.length,
itemBuilder: (context, index) {
Task task = taskProvider.tasks[index];
return GestureDetector(
onDoubleTap: (){
taskProvider.deleteTask(task.id);
},
child: ListTile(
title: Text(task.title),
trailing: IconButton(
icon: Icon(Icons.edit),
onPressed: () {
setState(() {
_selectedTask = task;
_titleController.text = task.title;
_showTaskDialog(context, taskProvider);
});
},
),
),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_showTaskDialog(context, taskProvider);
},
child: Icon(Icons.add),
),
);
}
void _showTaskDialog(BuildContext context, TaskProvider taskProvider) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text(_selectedTask == null ? 'Add Task' : 'Update Task'),
content: TextField(
controller: _titleController,
decoration: InputDecoration(hintText: 'Enter task title'),
),
actions: <Widget>[
TextButton(
child: Text('Cancel'),
onPressed: () {
setState(() {
_selectedTask = null;
_titleController.clear();
});
Navigator.pop(context);
},
),
TextButton(
child: Text(_selectedTask == null ? 'Add' : 'Update'),
onPressed: () {
if (_selectedTask == null) {
// Create new task
Task newTask = Task(
id: DateTime.now().toString(),
title: _titleController.text,
);
taskProvider.addTask(newTask);
} else {
// Update existing task
Task updatedTask = Task(
id: _selectedTask!.id,
title: _titleController.text,
completed: _selectedTask!.completed,
);
taskProvider.updateTask(updatedTask);
}
setState(() {
_selectedTask = null;
_titleController.clear();
});
Navigator.pop(context);
},
),
],
);
},
);
}
}
import 'package:crudu/taskprovider.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'dashboard.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => TaskProvider(),
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: TaskListScreen(),
),
);
}
}
Buy Our Flutter Course
Full access to our comprehensive Flutter course Includes source code, and lifetime updates
Price: ₹499
Full course will be sent via email within an hour
Comments
Post a Comment