Skip to main content

send data controller to provider

 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