import 'package:flutter/material.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:url_launcher/url_launcher.dart'; import '../data/database.dart'; import '../util/dialog_box.dart'; import '../util/todo_tile.dart'; Uri _url = Uri.parse('https://git.aiquiral.me/aiquiral/easytodo'); class HomePage extends StatefulWidget { const HomePage({super.key}); @override State createState() => _HomePageState(); } class _HomePageState extends State { final _myBox = Hive.box('mybox'); ToDoDataBase db = ToDoDataBase(); @override void initState() { // initial data if (_myBox.get("TODOLIST") == null) { db.createInitialData(); } else { // load data db.loadData(); } super.initState(); } final _controller = TextEditingController(); void checkBoxChanged(bool? value, int index) { setState(() { db.toDoList[index][1] = !db.toDoList[index][1]; }); db.updateDataBase(); } void saveNewTask() { setState(() { db.toDoList.add([_controller.text, false]); _controller.clear(); }); Navigator.of(context).pop(); db.updateDataBase(); } void createNewTask() { showDialog( context: context, builder: (context) { return DialogBox( controller: _controller, onSave: saveNewTask, onCancel: () { setState(() { _controller.clear(); }); Navigator.of(context).pop(); }, ); }, ); } void deleteTask(int index) { setState(() { db.toDoList.removeAt(index); }); db.updateDataBase(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, appBar: AppBar( backgroundColor: Colors.deepPurple, title: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text( "To-Do List", style: TextStyle( fontWeight: FontWeight.w500, color: Colors.white, ), ), IconButton( iconSize: 72, icon: const Icon( Icons.info, color: Colors.white, size: 30, ), onPressed: () { showDialog( context: context, builder: (BuildContext context) { return const AlertDialog( title: Text("About"), content: SizedBox( height: 100, child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( "This application is made by Anuj Kaushik (a.k.a. Aiqurial).\nLicensed under AGPLv3."), TextButton( onPressed: _launchUrl, child: Text("View Source Code")) ], ))); }); }) ]), ), floatingActionButton: FloatingActionButton( onPressed: createNewTask, backgroundColor: Colors.deepPurple, child: const Icon( Icons.add, color: Colors.white, ), ), body: ListView.builder( itemCount: db.toDoList.length, itemBuilder: (context, index) { return ToDoTile( taskName: db.toDoList[index][0], taskCompleted: db.toDoList[index][1], onChanged: (value) => checkBoxChanged(value, index), deleteFunction: (context) => deleteTask(index), ); }, ), ); } } Future _launchUrl() async { if (!await launchUrl(_url)) { throw Exception('Could not launch $_url'); } }