Files
Hightube/frontend/lib/pages/register_page.dart

60 lines
2.0 KiB
Dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../providers/settings_provider.dart';
import '../services/api_service.dart';
class RegisterPage extends StatefulWidget {
@override
_RegisterPageState createState() => _RegisterPageState();
}
class _RegisterPageState extends State<RegisterPage> {
final _usernameController = TextEditingController();
final _passwordController = TextEditingController();
bool _isLoading = false;
void _handleRegister() async {
setState(() => _isLoading = true);
final settings = context.read<SettingsProvider>();
final api = ApiService(settings, null);
try {
final response = await api.register(
_usernameController.text,
_passwordController.text,
);
if (response.statusCode == 201) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Registered! Please login.")));
Navigator.pop(context);
} else {
final error = jsonDecode(response.body)['error'] ?? "Registration Failed";
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(error)));
}
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Network Error")));
} finally {
setState(() => _isLoading = false);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Register")),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(controller: _usernameController, decoration: InputDecoration(labelText: "Username")),
TextField(controller: _passwordController, decoration: InputDecoration(labelText: "Password"), obscureText: true),
SizedBox(height: 20),
_isLoading ? CircularProgressIndicator() : ElevatedButton(onPressed: _handleRegister, child: Text("Register")),
],
),
),
);
}
}