Untitled
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...