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

Popular posts from this blog

Flutter pagination tutorial

option 1 import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; // API Service class ApiService {   static const String baseUrl = "https://jsonplaceholder.typicode.com";   static Future<List<dynamic>> fetchData(int page, int limit) async {     final response = await http.get(Uri.parse("$baseUrl/posts?_page=$page&_limit=$limit"));     if (response.statusCode == 200) {       return json.decode(response.body);     } else {       throw Exception("Failed to load data");     }   } } // GetX Controller for Pagination class PaginationController extends GetxController {   var items = <dynamic>[].obs;   var page = 1.obs;   final int limit = 10;   var isLoading = false.obs;   var hasMore = true.obs;   ScrollController scrollController = ScrollController();   @override   void...

Building a Dynamic Product List with GetX in Flutter

Building a Dynamic Product List with GetX in Flutter Learn how to create a responsive product screen using GetX in Flutter. This tutorial covers API integration, pagination, cart management, and quantity selection with efficient state management. Perfect for building an e-commerce app! class ProductScreenController extends GetxController{      RxList<Product> productList = <Product>[].obs;   RxList<Product> cartList = <Product>[].obs;   RxMap<int , int> quantityMap = <int , int>{}.obs;   RxMap<int, bool> showQuantitySelector = <int, bool>{}.obs; // ✅ Track Visibility of Quantity Selector   RxBool isLoading = false.obs;   RxBool isLoadingMore = false.obs;   final Dio dio = Dio();   int limit = 10;   int skip = 0;   bool hasMore = true; // ✅ Track if more data is available   @override   void onInit() {  // ✅ Automatically Call API when Controller initializes   ...