Skip to content
Snippets Groups Projects
Commit a99745a4 authored by Lee Jaehyeok's avatar Lee Jaehyeok
Browse files

Update main.dart

parent c3b3e24c
Branches master
No related tags found
No related merge requests found
import 'dart:convert';
import 'package:english_words/english_words.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:provider/provider.dart';
import 'package:http/http.dart' as http;
void main() {
runApp(MyApp());
runApp(
ChangeNotifierProvider(
create: (context) => MyAppState(),
child: const MyApp(),
),
);
}
class MyApp extends StatelessWidget {
......@@ -12,15 +21,26 @@ class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => MyAppState(),
child: MaterialApp(
var appState = context.watch<MyAppState>();
return MaterialApp(
title: 'Namer App',
theme: ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepOrange),
),
home: MyHomePage(),
home: FutureBuilder<List<WordPair>>(
future: appState.futureFavorites,
builder: (context, snapshot) {
if(snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
} else if(snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'),);
} else if(snapshot.hasData) {
return MyHomePage();
} else {
return const Center(child: Text('No favorites yer.'));
}
}
),
);
}
......@@ -28,20 +48,63 @@ class MyApp extends StatelessWidget {
class MyAppState extends ChangeNotifier {
var current = WordPair.random();
List<WordPair> favorites = [];
late Future<List<WordPair>> futureFavorites;
MyAppState() {
futureFavorites = fetchFavorites();
}
void getNext() {
current = WordPair.random();
notifyListeners();
}
var favorites = <WordPair>[];
Future<List<WordPair>> fetchFavorites() async {
final response = await http.get(
Uri.parse('http://localhost:3000/likes')
);
List<WordPair> list = [];
var jsonData = jsonDecode(response.body);
for (Map<String, dynamic> obj in jsonData) {
List<String> res = obj["id"].split('_');
list.add(WordPair(res[0], res[1]));
}
favorites = [...list];
notifyListeners();
return list;
}
void toggleFavorite() {
Future<void> toggleFavorite() async{
var uri = "http://localhost:3000/likes/${current.first}_${current.second}";
if (favorites.contains(current)) {
final http.Response resp = await http.delete(Uri.parse(uri));
if(resp.statusCode != 200) {
return;
}
favorites.remove(current);
favorites = [...favorites];
} else {
favorites.add(current);
print("1");
final http.Response resp = await http.post(
Uri.parse(uri),
headers: <String, String> {
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, dynamic>{
'collectionId': "${current.first}_${current.second}",
'like' : true,
})
);
print("2");
if(resp.statusCode != 200) {
return;
}
favorites = [...favorites, current];
}
print(favorites);
notifyListeners();
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment