Untitled

 avatar
unknown
plain_text
2 years ago
5.0 kB
3
Indexable
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart' as sql;
import 'package:path/path.dart' as path;
import 'result_page.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      routes: {
        '/': (context) => const MyHomePage(title: 'Flutter Demo Home Page'),
        '/result': (context) => const ResultPage(),
      },
      initialRoute: '/',
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  List<String> questions = [
    "Apakah pasien merasa sering lupa?(ya/tidak)",
    "Apakah pasein sering melakukan kegiatan berulang walau sudah mengerjakannya?(ya/tidak)",
    "Apakah pasien merasa letih ketika duduk dalam posisi yang lama?(ya/tidak)",
    "Apakah pasien juga merasa lemas ketika hanya berbaring saja?(ya/tidak)",
    // ... tambahkan pertanyaan lainnya sesuai kebutuhan
  ];
  late List<TextEditingController> answerControllers;

  @override
  void initState() {
    super.initState();
    // Inisialisasi controller untuk setiap pertanyaan
    answerControllers = List.generate(
      questions.length,
      (index) => TextEditingController(),
    );
  }

  @override
  void dispose() {
    // Hapus controller ketika tidak lagi diperlukan
    for (final controller in answerControllers) {
      controller.dispose();
    }
    super.dispose();
  }

  void _navigateToResultPage() async {
    final List<Map<String, dynamic>> data = [];
    for (int i = 0; i < questions.length; i++) {
      final answer = answerControllers[i].text;
      final question = questions[i];
      data.add({
        'question': question,
        'answer': answer,
      });
    }

    await Sqlite.createItem(data); // Menyimpan data ke database

    Navigator.pushNamed(context, '/result');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.green,
        title: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: const [
            Text('Test Demensia'),
          ],
        ),
      ),
      body: Column(
        children: [
          Expanded(
            child: ListView.builder(
              itemCount: questions.length,
              itemBuilder: (context, index) {
                return Row(
                  children: [
                    Expanded(
                      child: ListTile(
                        title: Text(questions[index]),
                      ),
                    ),
                    Expanded(
                      child: Padding(
                        padding: const EdgeInsets.symmetric(horizontal: 8.0),
                        child: TextField(
                          controller: answerControllers[index],
                          decoration: const InputDecoration(
                            hintText: 'Answer',
                          ),
                        ),
                      ),
                    ),
                  ],
                );
              },
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          _navigateToResultPage();
        },
        tooltip: 'Submit',
        child: const Icon(Icons.arrow_forward),
      ),
    );
  }
}

class Sqlite {
  static Future<sql.Database> db() async {
    final dbPath = await sql.getDatabasesPath();
    final pathToDb = path.join(dbPath, 'kindacode.db');
    return sql.openDatabase(
      pathToDb,
      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 IF NOT EXISTS items (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
question TEXT,
answer TEXT,
createdAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)
""");
  }

  static Future<void> createItem(List<Map<String, dynamic>> newData) async {
    final db = await Sqlite.db();
    final batch = db.batch();
    for (final data in newData) {
      batch.insert('items', data,
          conflictAlgorithm: sql.ConflictAlgorithm.replace);
    }
    await batch.commit(noResult: true); // Menggunakan noResult: true
  }

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