Persist Data with SQLite in Flutter (original) (raw)

`import 'package:flutter/material.dart'; import './models/planet.dart'; import './services/database.dart';

void main() { WidgetsFlutterBinding.ensureInitialized(); runApp(Home()); }

class Home extends StatefulWidget { Home({Key? key}) : super(key: key);

@override State createState() => _HomeState(); }

class _HomeState extends State { late DataBase handler;

Future addPlanets() async { Planets firstPlanet = Planets( name: "Mercury", age: 24, id: 1, distancefromsun: 10, ); Planets secondPlanet = Planets( name: "Venus", age: 31, id: 2, distancefromsun: 20, ); Planets thirdPlanet = Planets( id: 3, name: 'Earth', age: 4, distancefromsun: 30, ); Planets fourthPlanet = Planets( id: 4, name: 'Mars', age: 5, distancefromsun: 40, );

List<Planets> planets = [
  firstPlanet,
  secondPlanet,
  thirdPlanet,
  fourthPlanet,
];
return await handler.insertPlanets(planets);

}

Future deletePlanet(int id) async { await handler.deletePlanet(id); setState(() {}); }

Future editPlanet(Planets planet) async { await handler.updatePlanet(planet); setState(() {}); }

@override void initState() { super.initState(); handler = DataBase(); handler.initializedDB().whenComplete(() async { await addPlanets(); setState(() {}); }); }

@override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: Scaffold( appBar: AppBar( title: const Text('Planets'), backgroundColor: const Color.fromARGB(255, 108, 38, 0), foregroundColor: Colors.white, ), body: Padding( padding: const EdgeInsets.all(8.0), child: FutureBuilder( future: handler.retrievePlanets(), builder: ( BuildContext context, AsyncSnapshot<List> snapshot, ) { if (snapshot.hasData) { return ListView.builder( itemCount: snapshot.data?.length, itemBuilder: (BuildContext context, int index) { final planet = snapshot.data![index]; return Card( color: Colors.orange.shade100, child: ListTile( contentPadding: const EdgeInsets.all(8.0), title: Text(planet.name), subtitle: Text('Age: ${planet.age}'), trailing: Row( mainAxisSize: MainAxisSize.min, children: [ IconButton( icon: const Icon(Icons.edit), onPressed: () { // Example edit: Update the planet's name editPlanet(Planets( id: planet.id, name: '${planet.name} Updated', age: planet.age, distancefromsun: planet.distancefromsun, )); }, ), IconButton( icon: const Icon(Icons.delete), onPressed: () { deletePlanet(planet.id); }, ), ], ), ), ); }, ); } else { return const Center(child: CircularProgressIndicator()); } }, ), ), floatingActionButton: FloatingActionButton( backgroundColor: const Color.fromARGB(255, 108, 38, 0), foregroundColor: Colors.white, onPressed: () async { // Example add: Add a new planet await handler.insertPlanets([ Planets( id: DateTime.now().millisecondsSinceEpoch, name: 'New Planet', age: 1, distancefromsun: 50, ), ]); setState(() {}); }, child: const Icon(Icons.add), ), ), ); } }

`