diff --git a/lib/views/HomePage.dart b/lib/views/HomePage.dart index 862ea39..6cf1eb0 100644 --- a/lib/views/HomePage.dart +++ b/lib/views/HomePage.dart @@ -1,10 +1,24 @@ import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_study/views/LoginPageProvider.dart'; -class HomePage extends StatelessWidget { +class HomePage extends ConsumerStatefulWidget { const HomePage({super.key}); @override + ConsumerState createState() { + return _HomePageState(); + } +} + +class _HomePageState extends ConsumerState { + late final currentLoginUser = ref.watch(loginUserProvider); + + @override Widget build(BuildContext context) { - return Scaffold(body: Center(child: Text("Home"))); + return Scaffold( + appBar: AppBar(title: Text("欢迎${currentLoginUser.username}")), + body: Center(child: Text("Home")), + ); } } diff --git a/lib/views/LoginPage.dart b/lib/views/LoginPage.dart index 6c516f0..d71344e 100644 --- a/lib/views/LoginPage.dart +++ b/lib/views/LoginPage.dart @@ -1,10 +1,21 @@ import 'package:flutter/material.dart'; import 'package:flutter/widget_previews.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_study/views/LoginPageProvider.dart'; import 'package:go_router/go_router.dart'; -class LoginPage extends StatelessWidget { +class LoginPage extends ConsumerStatefulWidget { const LoginPage({super.key}); + @override + ConsumerState createState() { + return _LoginPageState(); + } +} + +class _LoginPageState extends ConsumerState { + late final currentUser = ref.watch(loginUserProvider); + @override Widget build(BuildContext context) { return Scaffold( @@ -24,6 +35,12 @@ class LoginPage extends StatelessWidget { flex: 4, child: TextField( decoration: const InputDecoration(hintText: '请输入用户名'), + controller: TextEditingController( + text: currentUser.username, + ), + onChanged: (value) { + ref.read(loginUserProvider).username = value; + }, ), ), ], @@ -36,6 +53,15 @@ class LoginPage extends StatelessWidget { flex: 4, child: TextField( decoration: const InputDecoration(hintText: '请输入密码'), + controller: TextEditingController( + text: currentUser.password, + ), + onChanged: (value) { + ref.read(loginUserProvider.notifier).update((oldValue) { + oldValue.password = value; + return oldValue; + }); + }, obscureText: true, ), ), diff --git a/lib/views/LoginPageProvider.dart b/lib/views/LoginPageProvider.dart new file mode 100644 index 0000000..28ac494 --- /dev/null +++ b/lib/views/LoginPageProvider.dart @@ -0,0 +1,20 @@ +import 'package:flutter_riverpod/legacy.dart'; + +// 当前的登录用户 +final loginUserProvider = StateProvider((ref) { + print("LoginUserProvider"); + final loginUser = LoginUser(); + loginUser.username = "admin"; + loginUser.password = "password"; + loginUser.token = null; + return loginUser; +}); + +// 生成token + + +class LoginUser { + String? username; + String? password; + String? token; +} diff --git a/lib/views/main.dart b/lib/views/main.dart index 459ea99..8c892ab 100644 --- a/lib/views/main.dart +++ b/lib/views/main.dart @@ -1,11 +1,12 @@ import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; import 'HomePage.dart'; import 'LoginPage.dart'; void main() { - runApp(MainApp()); + runApp(ProviderScope(child: MainApp())); } class MainApp extends StatelessWidget { diff --git a/pubspec.lock b/pubspec.lock index a9314f2..87f1f7c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,54 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "5b7468c326d2f8a4f630056404ca0d291ade42918f4a3c6233618e724f39da8e" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "92.0.0" + analysis_server_plugin: + dependency: transitive + description: + name: analysis_server_plugin + sha256: "44adba4d74a2541173bad4c11531d2a4d22810c29c5ddb458a38e9f4d0e5eac7" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "0.3.4" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "70e4b1ef8003c64793a9e268a551a82869a8a96f39deb73dea28084b0e8bf75e" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "9.0.0" + analyzer_buffer: + dependency: transitive + description: + name: analyzer_buffer + sha256: ff4bd291778c7417fe53fe24ee0d0a1f1ffe281a2d4ea887e7094f16e36eace7 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "0.3.0" + analyzer_plugin: + dependency: transitive + description: + name: analyzer_plugin + sha256: "6645a029da947ffd823d98118f385d4bd26b54eb069c006b22e0b94e451814b5" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "0.13.11" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "2.7.0" async: dependency: transitive description: @@ -17,6 +65,38 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "2.1.2" + build: + dependency: transitive + description: + name: build + sha256: "45d14a0fb23e018d8287c32fc98d726ce466b231928ed9b9200f29bd3ccd39ae" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "4.0.7" + build_config: + dependency: transitive + description: + name: build_config + sha256: f2c223156a26eea323e6244b85141d76413a80aeee9fe0b380773789fabaf8ae + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.3.1" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: "34e4067d30ce212937df995f03b69992eea683539ceeac7f679a1f1eba055b56" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "8.12.6" characters: dependency: transitive description: @@ -25,6 +105,22 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.4.1" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "2.0.4" + cli_config: + dependency: transitive + description: + name: cli_config + sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "0.2.0" clock: dependency: transitive description: @@ -33,6 +129,14 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.1.2" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: "6a6cab2ba4680d6423f34a9b972a4c9a94ebe1b62ecec4e1a1f2cba91fd1319d" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "4.11.1" collection: dependency: transitive description: @@ -41,6 +145,38 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.19.1" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.1.2" + coverage: + dependency: transitive + description: + name: coverage + sha256: "956a3de0725ca232ad353565a8290d3357592bf4250f6f298a185e2d949c5d3d" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.15.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.0.7" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.1.3" fake_async: dependency: transitive description: @@ -49,6 +185,22 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.3.3" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "7.0.1" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -62,6 +214,14 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "6.0.0" + flutter_riverpod: + dependency: "direct main" + description: + name: flutter_riverpod + sha256: "4e166be88e1dbbaa34a280bdb744aeae73b7ef25fdf8db7a3bb776760a3648e2" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.3.1" flutter_test: dependency: "direct dev" description: flutter @@ -72,6 +232,30 @@ packages: description: flutter source: sdk version: "0.0.0" + freezed_annotation: + dependency: transitive + description: + name: freezed_annotation + sha256: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.1.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "4.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "2.1.3" go_router: dependency: "direct main" description: @@ -88,6 +272,14 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.6.0" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.2.2" http_parser: dependency: transitive description: @@ -96,6 +288,22 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "4.1.2" + io: + dependency: transitive + description: + name: io + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.0.5" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "4.12.0" leak_tracker: dependency: transitive description: @@ -160,6 +368,38 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.17.0" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "2.0.0" + mockito: + dependency: transitive + description: + name: mockito + sha256: eff30d002f0c8bf073b6f929df4483b543133fcafce056870163587b03f1d422 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "5.6.4" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "2.0.2" + package_config: + dependency: transitive + description: + name: package_config + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "2.2.0" path: dependency: transitive description: @@ -168,11 +408,131 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.9.1" + pool: + dependency: transitive + description: + name: pool + sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.5.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "2.2.0" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.5.0" + riverpod: + dependency: transitive + description: + name: riverpod + sha256: "8c22216be8ad3ef2b44af3a329693558c98eca7b8bd4ef495c92db0bba279f83" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.2.1" + riverpod_analyzer_utils: + dependency: transitive + description: + name: riverpod_analyzer_utils + sha256: e55bc08c084a424e1bbdc303fe8ea75daafe4269b68fd0e0f6f1678413715b66 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.0.0-dev.9" + riverpod_annotation: + dependency: "direct main" + description: + name: riverpod_annotation + sha256: "16471a1260b94e939394d78f1c63a9350936ac4a68c9fbdab40be47268c0b04f" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "4.0.2" + riverpod_generator: + dependency: "direct dev" + description: + name: riverpod_generator + sha256: "6f9220534d7a353b53c875ea191a84d28cb4e52ac420a66a1bd7318329d977b0" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "4.0.3" + riverpod_lint: + dependency: "direct dev" + description: + name: riverpod_lint + sha256: "64e8debf5b719a37d48b9785dd595d34133fdcd84b8fd07157a621c54ab2156f" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.1.3" + shelf: + dependency: transitive + description: + name: shelf + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.4.2" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.1.3" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.0.0" sky_engine: dependency: transitive description: flutter source: sdk version: "0.0.0" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: ec37cc0e6694374cbef59ed79685572c870a54ede6fa30a3e420feb3adffea02 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "4.2.3" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "2.1.2" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "0.10.13" source_span: dependency: transitive description: @@ -189,6 +549,14 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.12.1" + state_notifier: + dependency: transitive + description: + name: state_notifier + sha256: b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.0.0" stream_channel: dependency: transitive description: @@ -213,6 +581,14 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.2.2" + test: + dependency: transitive + description: + name: test + sha256: "280d6d890011ca966ad08df7e8a4ddfab0fb3aa49f96ed6de56e3521347a9ae7" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.30.0" test_api: dependency: transitive description: @@ -221,6 +597,14 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "0.7.10" + test_core: + dependency: transitive + description: + name: test_core + sha256: "0381bd1585d1a924763c308100f2138205252fb90c9d4eeaf28489ee65ccde51" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "0.6.16" typed_data: dependency: transitive description: @@ -245,6 +629,14 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "15.2.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.2.1" web: dependency: transitive description: @@ -253,6 +645,46 @@ packages: url: "https://mirror.sjtu.edu.cn/dart-pub/" source: hosted version: "1.1.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.0.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.0.3" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "1.2.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "3.1.3" + yaml_edit: + dependency: transitive + description: + name: yaml_edit + sha256: "07c9e63ba42519745182b88ca12264a7ba2484d8239958778dfe4d44fe760488" + url: "https://mirror.sjtu.edu.cn/dart-pub/" + source: hosted + version: "2.2.4" sdks: dart: ">=3.11.5 <4.0.0" flutter: ">=3.38.0" diff --git a/pubspec.yaml b/pubspec.yaml index 9c9804a..0c4e615 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -10,11 +10,15 @@ dependencies: flutter: sdk: flutter go_router: ^17.3.0 + flutter_riverpod: ^3.2.1 + riverpod_annotation: ^4.0.2 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^6.0.0 + riverpod_generator: ^4.0.3 + riverpod_lint: dependency_overrides: http: ^1.2.0