Untitled
unknown
plain_text
3 years ago
5.0 kB
5
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...