feat: fake orders

This commit is contained in:
2024-06-18 15:14:37 +03:00
parent fb5538ab79
commit bdcd4507c2
5 changed files with 288 additions and 52 deletions

View File

@@ -1,10 +1,12 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:gymlink_module_web/components/app_bar.dart';
import 'package:gymlink_module_web/components/heading.dart';
import 'package:gymlink_module_web/components/history_item_card.dart';
import 'package:gymlink_module_web/interfaces/items.dart';
import 'package:gymlink_module_web/tools/history.dart';
import 'package:gymlink_module_web/tools/relative.dart';
import 'package:lazy_load_scrollview/lazy_load_scrollview.dart';
@@ -48,29 +50,22 @@ class HistoryPage extends StatefulWidget {
class _HistoryPageState extends State<HistoryPage> {
List<GymHistoryItem> my_orders = [];
late Timer _updateTimer;
bool _isLoading = true;
bool _isRefreshing = false;
@override
void initState() {
super.initState();
my_orders = [
GymHistoryItem(
id: '123', date: '01.01.1970', sum: '120', photo: 'product.png')
];
ordersRefresh();
}
void ordersRefresh() {
_updateTimer = Timer.periodic(const Duration(minutes: 1), _onRefresh);
Future.microtask(() => _onRefresh(_updateTimer));
}
void _onLoad() async {
await Future.delayed(const Duration(milliseconds: 1000));
setState(() {
my_orders.add(
GymHistoryItem(
id: '123', date: '01.01.1970', sum: '120', photo: 'product.png'),
);
});
}
@override
@@ -81,7 +76,12 @@ class _HistoryPageState extends State<HistoryPage> {
Future<void> _onRefresh(Timer timer) async {
await Future.delayed(const Duration(milliseconds: 1000));
debugPrint('refreshed');
var orders = await getHistory();
setState(() {
my_orders = orders;
_isLoading = false;
_isRefreshing = false;
});
}
@override
@@ -95,42 +95,83 @@ class _HistoryPageState extends State<HistoryPage> {
title: 'История заказов',
toMain: true,
),
Expanded(
child: Row(
children: [
Expanded(
child: LazyLoadScrollView(
onEndOfPage: _onLoad,
scrollOffset: 200,
child: RefreshIndicator(
edgeOffset: 55,
onRefresh: () => _onRefresh(_updateTimer),
child: Stack(
children: [
ListView.builder(
itemCount: my_orders.length,
itemBuilder: (context, index) {
final item = my_orders[index];
return HistoryItemCard(
id: item.id,
cost: item.sum,
date: item.date,
image: Image(
image: AssetImage('assets/${item.photo}'),
width: 50,
),
);
},
),
],
const SizedBox(height: 5),
kIsWeb && !_isLoading
? Center(
child: ElevatedButton(
onPressed: () {
setState(() => _isRefreshing = true);
_onRefresh(_updateTimer);
},
style: ElevatedButton.styleFrom(
backgroundColor: Theme.of(context).primaryColor,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(50)),
),
foregroundColor: Colors.white,
fixedSize: const Size(180, 40),
),
child: const Row(
mainAxisSize: MainAxisSize.min,
children: [
Text('Обновить'),
Spacer(),
Icon(Icons.refresh),
Spacer()
],
),
),
)
: const SizedBox.shrink(),
const SizedBox(height: 5),
_isRefreshing
? const Center(child: CircularProgressIndicator())
: const SizedBox.shrink(),
const SizedBox(height: 5),
_isLoading
? const Expanded(
child: Center(child: CircularProgressIndicator()))
: Expanded(
child: Row(
children: [
Expanded(
child: LazyLoadScrollView(
onEndOfPage: _onLoad,
scrollOffset: 200,
child: RefreshIndicator(
edgeOffset: 55,
onRefresh: () => _onRefresh(_updateTimer),
child: my_orders.isEmpty
? const Center(child: Text('Нет заказов'))
: Stack(
children: [
ListView.builder(
itemCount: my_orders.length,
itemBuilder: (context, index) {
final item = my_orders[index];
return HistoryItemCard(
id: item.id,
cost: item.sum,
date: item.date,
image: Image(
image: AssetImage(
'assets/${item.photo}'),
width: 50,
),
);
},
),
],
),
),
),
),
my_orders.isEmpty
? const SizedBox.shrink()
: getSpacer(context: context)
],
),
),
getSpacer(context: context)
],
),
),
],
),
);