auth
This commit is contained in:
parent
bb4fab6a11
commit
84cf6a0dda
7 changed files with 226 additions and 5 deletions
31
lib/api.dart
31
lib/api.dart
|
@ -1,13 +1,39 @@
|
|||
import 'dart:convert';
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class API {
|
||||
late SharedPreferences pref;
|
||||
static final API _instance = API._internal();
|
||||
|
||||
factory API() {
|
||||
return _instance;
|
||||
}
|
||||
|
||||
API._internal();
|
||||
|
||||
Future<void> init() async {
|
||||
pref = await SharedPreferences.getInstance();
|
||||
instance = pref.getString("instance") ?? "";
|
||||
}
|
||||
|
||||
bool isInit() {
|
||||
return pref.containsKey("token") && pref.containsKey("instance");
|
||||
}
|
||||
|
||||
void save(String instance, String token) {
|
||||
pref.setString("instance", instance);
|
||||
pref.setString("token", token);
|
||||
this.instance = instance;
|
||||
}
|
||||
|
||||
// todo : rework with auth
|
||||
static String instance = "http://192.168.2.20:8080";
|
||||
String instance = "";
|
||||
|
||||
Future<String> getRequest(String url) async {
|
||||
var resp = await http.get(Uri.parse(url), headers: <String, String>{
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Token': pref.getString("token")!
|
||||
});
|
||||
|
||||
return resp.body;
|
||||
|
@ -17,7 +43,8 @@ class API {
|
|||
var resp = await http.post(Uri.parse(url),
|
||||
headers: <String, String>{
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Content-Type': 'application/json'
|
||||
'Content-Type': 'application/json',
|
||||
'Token': pref.getString("token")!
|
||||
},
|
||||
body: jsonEncode(data));
|
||||
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
import 'package:cdb_ui/api.dart';
|
||||
import 'package:cdb_ui/pages/itemview.dart';
|
||||
import 'package:cdb_ui/pages/setup.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
void main() {
|
||||
Future<void> main() async {
|
||||
await API().init();
|
||||
runApp(const MyApp());
|
||||
}
|
||||
|
||||
|
@ -19,11 +21,13 @@ class MyApp extends StatelessWidget {
|
|||
seedColor: Colors.deepPurple, brightness: Brightness.dark),
|
||||
useMaterial3: true,
|
||||
),
|
||||
home: const MyHomePage(),
|
||||
home: API().isInit() ? MyHomePage() : SetupPage(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// todo : add setup with instance and token auth (api)
|
||||
|
||||
class StatsPage extends StatelessWidget {
|
||||
const StatsPage({super.key});
|
||||
|
||||
|
|
|
@ -21,6 +21,9 @@ class _ItemViewState extends State<ItemView> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text(widget.item.name),
|
||||
),
|
||||
body: Column(children: [
|
||||
Row(
|
||||
children: [
|
||||
|
|
72
lib/pages/setup.dart
Normal file
72
lib/pages/setup.dart
Normal file
|
@ -0,0 +1,72 @@
|
|||
import 'package:cdb_ui/api.dart';
|
||||
import 'package:cdb_ui/main.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class SetupPage extends StatefulWidget {
|
||||
@override
|
||||
_SetupPageState createState() => _SetupPageState();
|
||||
}
|
||||
|
||||
class _SetupPageState extends State<SetupPage> {
|
||||
final TextEditingController _urlController = TextEditingController();
|
||||
final TextEditingController _tokenController = TextEditingController();
|
||||
|
||||
Future<void> _saveSettings() async {
|
||||
String instanceUrl = _urlController.text.trim();
|
||||
String token = _tokenController.text.trim();
|
||||
|
||||
if (instanceUrl.isEmpty || token.isEmpty) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Please fill in all fields')),
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
API().save(instanceUrl, token);
|
||||
|
||||
// Indicate that the setup is complete
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Setup Complete!')),
|
||||
);
|
||||
|
||||
// Navigate or close the setup screen
|
||||
Navigator.pushReplacement(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => MyHomePage(),
|
||||
));
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Setup Page'),
|
||||
),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
TextField(
|
||||
controller: _urlController,
|
||||
decoration: InputDecoration(labelText: 'Instance URL'),
|
||||
keyboardType: TextInputType.url,
|
||||
),
|
||||
SizedBox(height: 16.0),
|
||||
TextField(
|
||||
controller: _tokenController,
|
||||
decoration: InputDecoration(labelText: 'Token'),
|
||||
obscureText: true,
|
||||
),
|
||||
SizedBox(height: 32.0),
|
||||
ElevatedButton(
|
||||
onPressed: _saveSettings,
|
||||
child: Text('Complete Setup'),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue