This commit is contained in:
Simon Ding
2024-07-17 19:02:32 +08:00
parent 3ace109962
commit bae9c3a1e1
8 changed files with 52 additions and 51 deletions

View File

@@ -72,6 +72,6 @@ class ActivityPage extends ConsumerWidget {
); );
}, },
error: (err, trace) => Text("$err"), error: (err, trace) => Text("$err"),
loading: () => MyProgressIndicator()); loading: () => const MyProgressIndicator());
} }
} }

View File

@@ -28,6 +28,7 @@ class LoginScreen extends ConsumerWidget {
title: 'Polaris', title: 'Polaris',
onLogin: (data) { onLogin: (data) {
ref.read(authSettingProvider.notifier).login(data.name, data.password); ref.read(authSettingProvider.notifier).login(data.name, data.password);
return null;
}, },
onSubmitAnimationCompleted: () { onSubmitAnimationCompleted: () {
context.go(WelcomePage.routeTv); context.go(WelcomePage.routeTv);

View File

@@ -23,7 +23,7 @@ class MyApp extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// GoRouter configuration // GoRouter configuration
final _shellRoute = ShellRoute( final shellRoute = ShellRoute(
builder: (BuildContext context, GoRouterState state, Widget child) { builder: (BuildContext context, GoRouterState state, Widget child) {
return SelectionArea( return SelectionArea(
child: Scaffold( child: Scaffold(
@@ -139,10 +139,10 @@ class MyApp extends StatelessWidget {
], ],
); );
final _router = GoRouter( final router = GoRouter(
navigatorKey: APIs.navigatorKey, navigatorKey: APIs.navigatorKey,
routes: [ routes: [
_shellRoute, shellRoute,
GoRoute( GoRoute(
path: LoginScreen.route, path: LoginScreen.route,
builder: (context, state) => const LoginScreen(), builder: (context, state) => const LoginScreen(),
@@ -172,7 +172,7 @@ class MyApp extends StatelessWidget {
seedColor: Colors.blue, brightness: Brightness.dark), seedColor: Colors.blue, brightness: Brightness.dark),
useMaterial3: true, useMaterial3: true,
), ),
routerConfig: _router, routerConfig: router,
), ),
); );
} }

View File

@@ -142,7 +142,7 @@ class _MovieDetailsPageState extends ConsumerState<MovieDetailsPage> {
icon: const Icon(Icons.download), icon: const Icon(Icons.download),
onPressed: () async { onPressed: () async {
await ref await ref
.read(movieTorrentsDataProvider(this.id) .read(movieTorrentsDataProvider(id)
.notifier) .notifier)
.download(torrent.link!); .download(torrent.link!);
}, },

View File

@@ -7,18 +7,18 @@ import 'package:ui/providers/APIs.dart';
import 'package:ui/providers/server_response.dart'; import 'package:ui/providers/server_response.dart';
var settingProvider = var settingProvider =
AsyncNotifierProvider.family<EditSettingData, String, String>( AsyncNotifierProvider.autoDispose.family<EditSettingData, String, String>(
EditSettingData.new); EditSettingData.new);
var indexersProvider = var indexersProvider =
AsyncNotifierProvider<IndexerSetting, List<Indexer>>(IndexerSetting.new); AsyncNotifierProvider.autoDispose<IndexerSetting, List<Indexer>>(IndexerSetting.new);
var dwonloadClientsProvider = var dwonloadClientsProvider =
AsyncNotifierProvider<DownloadClientSetting, List<DownloadClient>>( AsyncNotifierProvider.autoDispose<DownloadClientSetting, List<DownloadClient>>(
DownloadClientSetting.new); DownloadClientSetting.new);
var storageSettingProvider = var storageSettingProvider =
AsyncNotifierProvider<StorageSettingData, List<Storage>>( AsyncNotifierProvider.autoDispose<StorageSettingData, List<Storage>>(
StorageSettingData.new); StorageSettingData.new);
class EditSettingData extends FamilyAsyncNotifier<String, String> { class EditSettingData extends FamilyAsyncNotifier<String, String> {
@@ -113,10 +113,10 @@ class Indexer {
id = json["id"]; id = json["id"];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['name'] = this.name; data['name'] = name;
data['url'] = this.url; data['url'] = url;
data['api_key'] = this.apiKey; data['api_key'] = apiKey;
return data; return data;
} }
} }
@@ -196,14 +196,14 @@ class DownloadClient {
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>(); final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = this.id; data['id'] = id;
data['enable'] = this.enable; data['enable'] = enable;
data['name'] = this.name; data['name'] = name;
data['implementation'] = this.implementation; data['implementation'] = implementation;
data['url'] = this.url; data['url'] = url;
data['remove_completed_downloads'] = this.removeCompletedDownloads; data['remove_completed_downloads'] = removeCompletedDownloads;
data['remove_failed_downloads'] = this.removeFailedDownloads; data['remove_failed_downloads'] = removeFailedDownloads;
return data; return data;
} }
} }

View File

@@ -85,7 +85,7 @@ class _SearchPageState extends ConsumerState<SearchPage> {
return cards; return cards;
}, },
error: (err, trace) => [Text("$err")], error: (err, trace) => [Text("$err")],
loading: () => [MyProgressIndicator()]); loading: () => [const MyProgressIndicator()]);
var f = FutureBuilder( var f = FutureBuilder(
// We listen to the pending operation, to update the UI accordingly. // We listen to the pending operation, to update the UI accordingly.
@@ -93,7 +93,7 @@ class _SearchPageState extends ConsumerState<SearchPage> {
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.done && if (snapshot.connectionState != ConnectionState.done &&
snapshot.connectionState != ConnectionState.none) { snapshot.connectionState != ConnectionState.none) {
return MyProgressIndicator(); return const MyProgressIndicator();
} }
return ListView( return ListView(
children: res, children: res,
@@ -126,8 +126,8 @@ class _SearchPageState extends ConsumerState<SearchPage> {
builder: (BuildContext context) { builder: (BuildContext context) {
return Consumer( return Consumer(
builder: (context, ref, _) { builder: (context, ref, _) {
String _resSelected = "1080p"; String resSelected = "1080p";
int _storageSelected = 0; int storageSelected = 0;
var storage = ref.watch(storageSettingProvider); var storage = ref.watch(storageSettingProvider);
return AlertDialog( return AlertDialog(
@@ -137,7 +137,7 @@ class _SearchPageState extends ConsumerState<SearchPage> {
children: [ children: [
DropdownMenu( DropdownMenu(
label: const Text("清晰度"), label: const Text("清晰度"),
initialSelection: _resSelected, initialSelection: resSelected,
dropdownMenuEntries: const [ dropdownMenuEntries: const [
DropdownMenuEntry(value: "720p", label: "720p"), DropdownMenuEntry(value: "720p", label: "720p"),
DropdownMenuEntry(value: "1080p", label: "1080p"), DropdownMenuEntry(value: "1080p", label: "1080p"),
@@ -145,7 +145,7 @@ class _SearchPageState extends ConsumerState<SearchPage> {
], ],
onSelected: (value) { onSelected: (value) {
setState(() { setState(() {
_resSelected = value!; resSelected = value!;
}); });
}, },
), ),
@@ -153,14 +153,14 @@ class _SearchPageState extends ConsumerState<SearchPage> {
data: (v) { data: (v) {
return DropdownMenu( return DropdownMenu(
label: const Text("存储位置"), label: const Text("存储位置"),
initialSelection: _storageSelected, initialSelection: storageSelected,
dropdownMenuEntries: v dropdownMenuEntries: v
.map((s) => DropdownMenuEntry( .map((s) => DropdownMenuEntry(
label: s.name!, value: s.id)) label: s.name!, value: s.id))
.toList(), .toList(),
onSelected: (value) { onSelected: (value) {
setState(() { setState(() {
_storageSelected = value!; storageSelected = value!;
}); });
}, },
); );
@@ -185,11 +185,11 @@ class _SearchPageState extends ConsumerState<SearchPage> {
), ),
child: const Text('确定'), child: const Text('确定'),
onPressed: () { onPressed: () {
print(_storageSelected); print(storageSelected);
ref ref
.read(searchPageDataProvider.notifier) .read(searchPageDataProvider.notifier)
.submit2Watchlist(item.id!, _storageSelected, .submit2Watchlist(item.id!, storageSelected,
_resSelected, item.mediaType!); resSelected, item.mediaType!);
Navigator.of(context).pop(); Navigator.of(context).pop();
}, },
), ),

View File

@@ -61,7 +61,7 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
); );
}, },
error: (err, trace) => Text("$err"), error: (err, trace) => Text("$err"),
loading: () => MyProgressIndicator()), loading: () => const MyProgressIndicator()),
dirKey.when( dirKey.when(
data: (data) { data: (data) {
_downloadDirController.text = data; _downloadDirController.text = data;
@@ -80,7 +80,7 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
); );
}, },
error: (err, trace) => Text("$err"), error: (err, trace) => Text("$err"),
loading: () => MyProgressIndicator()), loading: () => const MyProgressIndicator()),
Center( Center(
child: Padding( child: Padding(
padding: const EdgeInsets.only(top: 28.0), padding: const EdgeInsets.only(top: 28.0),
@@ -154,7 +154,7 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
))); )));
}), }),
error: (err, trace) => Text("$err"), error: (err, trace) => Text("$err"),
loading: () => MyProgressIndicator()); loading: () => const MyProgressIndicator());
}); });
var downloadClients = ref.watch(dwonloadClientsProvider); var downloadClients = ref.watch(dwonloadClientsProvider);
@@ -197,7 +197,7 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
))); )));
}), }),
error: (err, trace) => Text("$err"), error: (err, trace) => Text("$err"),
loading: () => MyProgressIndicator()); loading: () => const MyProgressIndicator());
}); });
var storageSettingData = ref.watch(storageSettingProvider); var storageSettingData = ref.watch(storageSettingProvider);
@@ -238,12 +238,12 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
))); )));
}), }),
error: (err, trace) => Text("$err"), error: (err, trace) => Text("$err"),
loading: () => MyProgressIndicator()); loading: () => const MyProgressIndicator());
}); });
var authData = ref.watch(authSettingProvider); var authData = ref.watch(authSettingProvider);
TextEditingController _userController = TextEditingController(); TextEditingController userController = TextEditingController();
TextEditingController _passController = TextEditingController(); TextEditingController passController = TextEditingController();
var authSetting = authData.when( var authSetting = authData.when(
data: (data) { data: (data) {
if (_enableAuth == null) { if (_enableAuth == null) {
@@ -251,7 +251,7 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
_enableAuth = data.enable; _enableAuth = data.enable;
}); });
} }
_userController.text = data.user; userController.text = data.user;
return Column( return Column(
children: [ children: [
SwitchListTile( SwitchListTile(
@@ -266,13 +266,13 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
? Column( ? Column(
children: [ children: [
TextFormField( TextFormField(
controller: _userController, controller: userController,
decoration: const InputDecoration( decoration: const InputDecoration(
labelText: "用户名", labelText: "用户名",
icon: Icon(Icons.verified_user), icon: Icon(Icons.verified_user),
)), )),
TextFormField( TextFormField(
controller: _passController, controller: passController,
decoration: const InputDecoration( decoration: const InputDecoration(
labelText: "密码", labelText: "密码",
icon: Icon(Icons.verified_user), icon: Icon(Icons.verified_user),
@@ -287,13 +287,13 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
ref ref
.read(authSettingProvider.notifier) .read(authSettingProvider.notifier)
.updateAuthSetting(_enableAuth!, .updateAuthSetting(_enableAuth!,
_userController.text, _passController.text); userController.text, passController.text);
})) }))
], ],
); );
}, },
error: (err, trace) => Text("$err"), error: (err, trace) => Text("$err"),
loading: () => MyProgressIndicator()); loading: () => const MyProgressIndicator());
return ListView( return ListView(
children: [ children: [
@@ -490,7 +490,7 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
passController.text = s.settings!["password"] ?? ""; passController.text = s.settings!["password"] ?? "";
} }
String _selectImpl = String selectImpl =
s.implementation == null ? "local" : s.implementation!; s.implementation == null ? "local" : s.implementation!;
return StatefulBuilder(builder: (context, setState) { return StatefulBuilder(builder: (context, setState) {
return AlertDialog( return AlertDialog(
@@ -502,10 +502,10 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
label: const Text("实现"), label: const Text("实现"),
onSelected: (value) { onSelected: (value) {
setState(() { setState(() {
_selectImpl = value!; selectImpl = value!;
}); });
}, },
initialSelection: _selectImpl, initialSelection: selectImpl,
dropdownMenuEntries: const [ dropdownMenuEntries: const [
DropdownMenuEntry(value: "local", label: "本地存储"), DropdownMenuEntry(value: "local", label: "本地存储"),
DropdownMenuEntry(value: "webdav", label: "webdav") DropdownMenuEntry(value: "webdav", label: "webdav")
@@ -515,7 +515,7 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
decoration: const InputDecoration(labelText: "名称"), decoration: const InputDecoration(labelText: "名称"),
controller: nameController, controller: nameController,
), ),
_selectImpl != "local" selectImpl != "local"
? ?
Column( Column(
children: [ children: [
@@ -573,7 +573,7 @@ class _SystemSettingsPageState extends ConsumerState<SystemSettingsPage> {
.read(storageSettingProvider.notifier) .read(storageSettingProvider.notifier)
.addStorage(Storage( .addStorage(Storage(
name: nameController.text, name: nameController.text,
implementation: _selectImpl, implementation: selectImpl,
settings: { settings: {
"tv_path": tvPathController.text, "tv_path": tvPathController.text,
"movie_path": moviePathController.text, "movie_path": moviePathController.text,

View File

@@ -46,7 +46,7 @@ class _TvDetailsPageState extends ConsumerState<TvDetailsPage> {
builder: (context, snapshot) { builder: (context, snapshot) {
return seriesDetails.when( return seriesDetails.when(
data: (details) { data: (details) {
Map<int, List<DataRow>> m = Map(); Map<int, List<DataRow>> m = {};
for (final ep in details.episodes!) { for (final ep in details.episodes!) {
var row = DataRow(cells: [ var row = DataRow(cells: [
DataCell(Text("${ep.episodeNumber}")), DataCell(Text("${ep.episodeNumber}")),