Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,24 +1,45 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:provider/provider.dart' as legacy_provider;
import 'package:starkwager/extensions/build_context_extension.dart';
import 'package:starkwager/routing/router.dart';
import 'package:starkwager/utils/provider_observer.dart';
import 'core/providers/app_theme_mode_provider.dart';
import 'providers/auth_provider.dart';
import 'providers/wager_provider.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();

runApp(ProviderScope(
runApp(
ProviderScope(
observers: [AppObserver()],
child: EasyLocalization(
supportedLocales: const [Locale('en')],
path: 'assets/translations',
fallbackLocale: const Locale('en'),
useOnlyLangCode: true,
child: MainApp(),
)));
child: const MyApp(),
),
),
);
}

class MyApp extends StatelessWidget {
const MyApp({super.key});

@override
Widget build(BuildContext context) {
return legacy_provider.MultiProvider(
providers: [
legacy_provider.ChangeNotifierProvider(create: (_) => AuthProvider()..init()),
legacy_provider.ChangeNotifierProvider(create: (_) => WagerProvider()),
],
child: const MainApp(),
);
}
}

class MainApp extends ConsumerWidget {
Expand Down
30 changes: 30 additions & 0 deletions lib/models/wager_create_request.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
class WagerCreateRequest {
final String title;
final String description;
final DateTime deadline;
final double amount;
final String outcomeA;
final String outcomeB;
// Add other required fields based on the API spec

WagerCreateRequest({
required this.title,
required this.description,
required this.deadline,
required this.amount,
required this.outcomeA,
required this.outcomeB,
});

Map<String, dynamic> toJson() {
return {
'title': title,
'description': description,
'deadline': deadline.toIso8601String(),
'amount': amount,
'outcomeA': outcomeA,
'outcomeB': outcomeB,
// Include other fields
};
}
}
18 changes: 18 additions & 0 deletions lib/models/wager_create_response.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
class WagerCreateResponse {
final String id;
final String status;
// Add other fields from the response

WagerCreateResponse({
required this.id,
required this.status,
});

factory WagerCreateResponse.fromJson(Map<String, dynamic> json) {
return WagerCreateResponse(
id: json['id'],
status: json['status'],
// Map other fields
);
}
}
49 changes: 49 additions & 0 deletions lib/providers/auth_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../services/auth_service.dart';

class AuthProvider extends ChangeNotifier {
String? _token;
bool _isConnected = false;

String? get token => _token;
bool get isConnected => _isConnected;

Future<void> init() async {
final prefs = await SharedPreferences.getInstance();
_token = prefs.getString('auth_token');
_isConnected = _token != null;
notifyListeners();
}

Future<bool> connectWallet(String walletAddress) async {
try {
final authService = AuthService();
final loginResponse = await authService.createLogin(walletAddress);

_token = loginResponse.token;
_isConnected = true;

// Save token to shared preferences
final prefs = await SharedPreferences.getInstance();
await prefs.setString('auth_token', _token!);

notifyListeners();
return true;
} catch (e) {
print('Error connecting wallet: $e');
return false;
}
}

void disconnect() async {
_token = null;
_isConnected = false;

// Clear token from shared preferences
final prefs = await SharedPreferences.getInstance();
await prefs.remove('auth_token');

notifyListeners();
}
}
46 changes: 46 additions & 0 deletions lib/providers/wager_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import 'package:flutter/material.dart';
import '../models/wager_create_request.dart';
import '../models/wager_create_response.dart';
import '../services/wager_service.dart';

class WagerProvider extends ChangeNotifier {
final WagerService _wagerService = WagerService();
bool isLoading = false;
String? error;
WagerCreateResponse? createdWager;

Future<bool> createWager({
required String title,
required String description,
required DateTime deadline,
required double amount,
required String outcomeA,
required String outcomeB,
required String token,
}) async {
isLoading = true;
error = null;
notifyListeners();

try {
final request = WagerCreateRequest(
title: title,
description: description,
deadline: deadline,
amount: amount,
outcomeA: outcomeA,
outcomeB: outcomeB,
);

createdWager = await _wagerService.createWager(request, token);
isLoading = false;
notifyListeners();
return true;
} catch (e) {
isLoading = false;
error = e.toString();
notifyListeners();
return false;
}
}
}
Loading
Loading