Skip to content
Snippets Groups Projects
Commit 97e5229c authored by 현민 정's avatar 현민 정
Browse files

통신완료

parent 8ef77abd
Branches main
No related tags found
No related merge requests found
import 'dart:convert';
import 'package:english_words/english_words.dart'; import 'package:english_words/english_words.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:http/http.dart' as http;
void main() { void main() {
runApp(MyApp()); runApp(
ChangeNotifierProvider(
create: (context) => MyAppState(),
child: const MyApp(),
),
);
} }
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
...@@ -11,15 +19,26 @@ class MyApp extends StatelessWidget { ...@@ -11,15 +19,26 @@ class MyApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ChangeNotifierProvider( var appState = context.watch<MyAppState>();
create: (context) => MyAppState(), return MaterialApp(
child: MaterialApp(
title: 'Namer App', title: 'Namer App',
theme: ThemeData( theme: ThemeData(
useMaterial3: true, useMaterial3: true,
colorScheme: ColorScheme.fromSeed(seedColor: Colors.lightBlueAccent), 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 yet.'));
}
},
), ),
); );
} }
...@@ -27,6 +46,11 @@ class MyApp extends StatelessWidget { ...@@ -27,6 +46,11 @@ class MyApp extends StatelessWidget {
class MyAppState extends ChangeNotifier { class MyAppState extends ChangeNotifier {
var current = WordPair.random(); var current = WordPair.random();
late Future<List<WordPair>> futureFavorites;
MyAppState() {
futureFavorites = fetchFavorites();
}
void getNext() { void getNext() {
current = WordPair.random(); current = WordPair.random();
...@@ -35,12 +59,49 @@ class MyAppState extends ChangeNotifier { ...@@ -35,12 +59,49 @@ class MyAppState extends ChangeNotifier {
var favorites = <WordPair>[]; var favorites = <WordPair>[];
void toggleFavorite() { 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;
}
Future<void> toggleFavorite() async {
var uri = "http://localhost:3000/likes/${current.first}_${current.second}";
if (favorites.contains(current)) { if (favorites.contains(current)) {
final http.Response resp = await http.delete(Uri.parse(uri));
if (resp.statusCode != 200) {
return;
}
favorites.remove(current); favorites.remove(current);
favorites = [...favorites];
} else { } else {
favorites.add(current); 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,
}),
);
if (resp.statusCode != 200) {
return;
}
favorites = [...favorites, current];
} }
print(favorites);
notifyListeners(); notifyListeners();
} }
} }
......
...@@ -83,6 +83,22 @@ packages: ...@@ -83,6 +83,22 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
http:
dependency: "direct main"
description:
name: http
sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
http_parser:
dependency: transitive
description:
name: http_parser
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
url: "https://pub.dev"
source: hosted
version: "4.1.2"
leak_tracker: leak_tracker:
dependency: transitive dependency: transitive
description: description:
...@@ -216,6 +232,14 @@ packages: ...@@ -216,6 +232,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.4" version: "0.7.4"
typed_data:
dependency: transitive
description:
name: typed_data
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
version: "1.4.0"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
...@@ -232,6 +256,14 @@ packages: ...@@ -232,6 +256,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.3.1" version: "14.3.1"
web:
dependency: transitive
description:
name: web
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
sdks: sdks:
dart: ">=3.7.2 <4.0.0" dart: ">=3.7.2 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54" flutter: ">=3.18.0-18.0.pre.54"
name: my_first_flutter name: my_first_flutter
description: "A new Flutter project." description: 'A new Flutter project.'
# The following line prevents the package from being accidentally published to # The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages. # pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev publish_to: 'none' # Remove this line if you wish to publish to pub.dev
...@@ -36,6 +36,7 @@ dependencies: ...@@ -36,6 +36,7 @@ dependencies:
cupertino_icons: ^1.0.8 cupertino_icons: ^1.0.8
english_words: any english_words: any
provider: any provider: any
http: ^1.4.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
...@@ -53,7 +54,6 @@ dev_dependencies: ...@@ -53,7 +54,6 @@ dev_dependencies:
# The following section is specific to Flutter packages. # The following section is specific to Flutter packages.
flutter: flutter:
# The following line ensures that the Material Icons font is # The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in # included with your application, so that you can use the icons in
# the material Icons class. # the material Icons class.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment