Files
rog_app/lib/pages/history/history_page.dart
2023-09-15 20:26:15 +05:30

128 lines
4.5 KiB
Dart

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:rogapp/model/destination.dart';
import 'package:rogapp/utils/database_helper.dart';
class HistoryPage extends StatefulWidget {
const HistoryPage({super.key});
@override
State<HistoryPage> createState() => _HistoryPageState();
}
class _HistoryPageState extends State<HistoryPage> {
DatabaseHelper db = DatabaseHelper.instance;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("通過履歴"),
),
body: SingleChildScrollView(
child: Column(
children: [
FutureBuilder(
future: db.getDestinations(),
builder: (BuildContext context,
AsyncSnapshot<List<Destination>> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Center(
child: Text(
'${snapshot.error} occurred',
style: TextStyle(fontSize: 18),
),
);
} else if (snapshot.hasData) {
final dests = snapshot.data;
if (dests!.length > 0) {
print("----- history -----");
return Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
child: ListView.builder(
itemCount: dests.length,
itemBuilder: (ctx, index) {
print("--- photo ${dests[index].checkin_image!} ----");
return Padding(
padding: const EdgeInsets.all(8.0),
child: CustomWidget(title: dests[index].name!,
subtitle: "${dests[index].sub_loc_id} : ${dests[index].name}",
image1: dests[index].checkin_image != null ? Image.file(File(dests[index].checkin_image!)) : null,
image2: dests[index].buypoint_image != null ? Image.file(File(dests[index].buypoint_image!)) : null,
),
);
}));
} else {
return Center(child: Text("No checkin yet"));
}
}
} else if (snapshot.connectionState ==
ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
return Container();
}),
],
),
),
);
}
}
class CustomWidget extends StatelessWidget {
final Image? image1;
final Image? image2;
final String title;
final String subtitle;
CustomWidget({
this.image1,
this.image2,
required this.title,
required this.subtitle,
});
@override
Widget build(BuildContext context) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: 104, // 50 (width of each image) + 2 (space between images) + 2*1 (padding on both sides)
child: Row(
children: [
if (image1 != null) SizedBox(width: 50, height: 100, child: image1,),
if (image1 != null && image2 != null) SizedBox(width: 2),
if (image2 != null) SizedBox(width: 50, height: 100, child: image2,),
],
),
),
SizedBox(width: 10),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
maxLines: null, // Allows the text to wrap onto an unlimited number of lines
),
Text(
subtitle,
style: TextStyle(fontSize: 16),
maxLines: null, // Allows the text to wrap onto an unlimited number of lines
),
],
),
),
],
);
}
}