nord vpnnord vpn
Ad

Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
4.5 kB
4
Indexable
Never
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart' as sql;
import 'package:path/path.dart' as path;

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 MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  TextEditingController titleInput = TextEditingController();
  List<Map<String, dynamic>> dataInput = [];

  void _refreshData() async {
    final data = await Sqlite.getItems();
    setState(() {
      dataInput = data;
    });
  }

  @override
  Widget build(BuildContext context) {
    // This method is rerun every time setState is called, for instance as done
    // by the _incrementCounter method above.
    //
    // The Flutter framework has been optimized to make rerunning build methods
    // fast, so that you can just rebuild anything that needs updating rather
    // than having to individually change instances of widgets.
    return Scaffold(
      appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: TextField(controller: titleInput),
      ),
      body: ListView.builder(
        itemCount: dataInput.length,
        itemBuilder: (context, index) {
          if (dataInput.isEmpty) {
            Text("No Data");
          } else if (dataInput.isNotEmpty) {
            return ListTile(
                title: Text(dataInput[index]['title']),
                onLongPress: () async {
                  await Sqlite.deleteLocation(dataInput[index]['id']);
                  _refreshData();
                  print(dataInput);
                },
                onTap: () async {
                  await Sqlite.updateItem(
                      dataInput[index]['id'], titleInput.text);
                  _refreshData();
                  print(dataInput);
                });
          }
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          await Sqlite.createItem(titleInput.text);
          _refreshData();
          print(dataInput);
        },
        tooltip: 'Increment',
        child: const Icon(Icons.save),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

class Sqlite {
  static Future<sql.Database> db() async {
    return sql.openDatabase(
      'kindacode.db',
      version: 1,
      onCreate: (sql.Database database, int version) async {
        await createTables(database);
      },
    );
  }

  static Future<void> createTables(sql.Database database) async {
    await database.execute("""CREATE TABLE items(
      id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      title TEXT,
      createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
      )
      """);
  }

  static Future<List<Map<String, dynamic>>> getItems() async {
    final db = await Sqlite.db();
    return db.query('items', orderBy: "id");
  }

  static Future<int> createItem(String title) async {
    final db = await Sqlite.db();
    final data = {'title': title};
    final id = await db.insert('items', data,
        conflictAlgorithm: sql.ConflictAlgorithm.replace);
    return id;
  }

  static Future<int> updateItem(int id, String title) async {
    final db = await Sqlite.db();
    final data = {'title': title, 'createdAt': DateTime.now().toString()};
    final result =
        await db.update('items', data, where: "id = ?", whereArgs: [id]);
    return result;
  }

  static Future<void> deleteLocation(int id) async {
    // Get a reference to the database.
    final db = await Sqlite.db();
    await db.delete(
      'items',
      where: "id = ?",
      whereArgs: [id],
    );
  }
}

nord vpnnord vpn
Ad