diff --git a/ui/lib/activity.dart b/ui/lib/activity.dart index a4b4b53..7388779 100644 --- a/ui/lib/activity.dart +++ b/ui/lib/activity.dart @@ -1,11 +1,11 @@ -import 'dart:js_interop_unsafe'; - import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:ui/providers/activity.dart'; class ActivityPage extends ConsumerWidget { static const route = "/activities"; + + const ActivityPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { var activitiesWatcher = ref.watch(activitiesDataProvider); @@ -23,7 +23,7 @@ class ActivityPage extends ConsumerWidget { DataColumn(label: Text("操作")) ], rows: List.generate(activities.length, (i) { - var activity = activities[activities.length - i -1]; + var activity = activities[activities.length - i - 1]; return DataRow(cells: [ DataCell(Text("${activity.id}")), diff --git a/ui/lib/providers/welcome_data.dart b/ui/lib/providers/welcome_data.dart index 6809ab2..ce3e34c 100644 --- a/ui/lib/providers/welcome_data.dart +++ b/ui/lib/providers/welcome_data.dart @@ -43,7 +43,8 @@ class SearchPageData extends AutoDisposeAsyncNotifier> { ref.invalidate(welcomePageDataProvider); } - void queryResults(String q) async { + Future queryResults(String q) async { + list = List.empty(growable: true); final dio = await APIs.getDio(); var resp = await dio.get(APIs.searchUrl, queryParameters: {"query": q}); //var dy = jsonDecode(resp.data.toString()); diff --git a/ui/lib/search.dart b/ui/lib/search.dart index 62b1f32..16748ae 100644 --- a/ui/lib/search.dart +++ b/ui/lib/search.dart @@ -18,6 +18,7 @@ class SearchPage extends ConsumerStatefulWidget { class _SearchPageState extends ConsumerState { List list = List.empty(); + Future? _pendingFuture; @override Widget build(BuildContext context) { var searchList = ref.watch(searchPageDataProvider); @@ -69,22 +70,38 @@ class _SearchPageState extends ConsumerState { }, error: (err, trace) => [Text("$err")], loading: () => [const CircularProgressIndicator()]); + + var f = FutureBuilder( + // We listen to the pending operation, to update the UI accordingly. + future: _pendingFuture, + builder: (context, snapshot) { + if (snapshot.connectionState != ConnectionState.done && + snapshot.connectionState != ConnectionState.none) { + return const Center( + child: SizedBox( + width: 30, height: 30, child: CircularProgressIndicator())); + } + return ListView( + children: res, + ); + }); return Column( children: [ TextField( autofocus: true, - onSubmitted: (value) { - ref.read(searchPageDataProvider.notifier).queryResults(value); + onSubmitted: (value) async { + var f = + ref.read(searchPageDataProvider.notifier).queryResults(value); + setState(() { + _pendingFuture = f; + }); }, decoration: const InputDecoration( labelText: "搜索", hintText: "搜索剧集名称", prefixIcon: Icon(Icons.search)), ), - Expanded( - child: ListView( - children: res, - )) + Expanded(child: f) ], ); } @@ -151,9 +168,8 @@ class _SearchPageState extends ConsumerState { ), child: const Text('确定'), onPressed: () { - ref - .read(searchPageDataProvider.notifier) - .submit2Watchlist(item.id!, _storageSelected, _resSelected); + ref.read(searchPageDataProvider.notifier).submit2Watchlist( + item.id!, _storageSelected, _resSelected); Navigator.of(context).pop(); }, ), diff --git a/ui/lib/tv_details.dart b/ui/lib/tv_details.dart index a83b546..a8b93c9 100644 --- a/ui/lib/tv_details.dart +++ b/ui/lib/tv_details.dart @@ -124,7 +124,7 @@ class _TvDetailsPageState extends ConsumerState { Text( "${details!.name}", style: const TextStyle( - fontSize: 14, + fontSize: 20, fontWeight: FontWeight.bold), ), const Text(""),