mirror of
https://github.com/inventree/inventree-app.git
synced 2025-06-12 18:25:26 +00:00
Make a 'refreshable_state' class which makes API requests easier
This commit is contained in:
61
lib/widget/refreshable_state.dart
Normal file
61
lib/widget/refreshable_state.dart
Normal file
@ -0,0 +1,61 @@
|
||||
import 'package:InvenTree/widget/drawer.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
import 'package:InvenTree/widget/drawer.dart';
|
||||
|
||||
|
||||
abstract class RefreshableState<T extends StatefulWidget> extends State<T> {
|
||||
|
||||
// Storage for context once "Build" is called
|
||||
BuildContext context;
|
||||
|
||||
String app_bar_title = "App Bar Title";
|
||||
|
||||
void initState() {
|
||||
super.initState();
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) => request(context));
|
||||
}
|
||||
|
||||
// Function to request data for this page
|
||||
Future<void> request(BuildContext context) async {
|
||||
return;
|
||||
}
|
||||
|
||||
Future<void> refresh() async {
|
||||
await request(context);
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
// Function to construct an appbar (override if needed)
|
||||
AppBar getAppBar(BuildContext context) {
|
||||
return AppBar(
|
||||
title: Text(app_bar_title)
|
||||
);
|
||||
}
|
||||
|
||||
// Function to construct a drawer (override if needed)
|
||||
Widget getDrawer(BuildContext context) {
|
||||
return InvenTreeDrawer(context);
|
||||
}
|
||||
|
||||
// Function to construct a body (MUST BE PROVIDED)
|
||||
Widget getBody(BuildContext context);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
// Save the context for future use
|
||||
this.context = context;
|
||||
|
||||
return Scaffold(
|
||||
appBar: getAppBar(context),
|
||||
drawer: getDrawer(context),
|
||||
body: RefreshIndicator(
|
||||
onRefresh: refresh,
|
||||
child: getBody(context)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user