feat(flutter): 重构播放页并增加语言切换
This commit is contained in:
1 parent
f1efbc5be8
commit
8c43e9e385
34 files changed
+1331
-879
No files matched your search
@@ -28,7 +28,6 @@ class DiscoverLogic extends ChangeNotifier {
|
||||
String _lastRequestedQuery = '';
|
||||
int _searchRequest = 0;
|
||||
bool _disposed = false;
|
||||
TheaterLanguage language = TheaterLanguage.all;
|
||||
String? selectedCategoryId;
|
||||
|
||||
bool get hasSearchQuery => search.text.trim().isNotEmpty;
|
||||
@@ -50,13 +49,6 @@ class DiscoverLogic extends ChangeNotifier {
|
||||
|
||||
void openSearch() => searchFocus.requestFocus();
|
||||
|
||||
/// 选择语言;当前仅改变视觉选中态,不参与数据过滤。
|
||||
void selectLanguage(TheaterLanguage value) {
|
||||
if (language == value) return;
|
||||
language = value;
|
||||
notify();
|
||||
}
|
||||
|
||||
/// 选择分类;空值表示全部。
|
||||
void selectCategory(String? categoryId) {
|
||||
if (selectedCategoryId == categoryId) return;
|
||||
|
||||
@@ -7,9 +7,6 @@ import '../../core/data/models/drama.dart';
|
||||
/// 剧场页与根导航之间的动作。
|
||||
enum DiscoverPageAction { home, create, my }
|
||||
|
||||
/// 剧场语言筛选的视觉选中态。
|
||||
enum TheaterLanguage { all, zh, id, ms, en }
|
||||
|
||||
/// 剧场页导航回调;没有 `onAction` 时按独立页面处理。
|
||||
class DiscoverPageCallbacks {
|
||||
const DiscoverPageCallbacks({
|
||||
|
||||
@@ -175,7 +175,6 @@ class _DiscoverPageState extends State<DiscoverPage> {
|
||||
: categories.dramasOf(logic.selectedCategoryId!);
|
||||
return [
|
||||
_categoryChips(l10n, categories),
|
||||
_languageChips(l10n),
|
||||
if (dramas.isEmpty)
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 40),
|
||||
@@ -222,38 +221,6 @@ class _DiscoverPageState extends State<DiscoverPage> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _languageChips(AppLocalizations l10n) {
|
||||
final entries = [
|
||||
(TheaterLanguage.all, l10n.allLanguages),
|
||||
(TheaterLanguage.zh, l10n.simplifiedChinese),
|
||||
(TheaterLanguage.id, l10n.bahasaIndonesia),
|
||||
(TheaterLanguage.ms, l10n.bahasaMelayu),
|
||||
(TheaterLanguage.en, l10n.english),
|
||||
];
|
||||
return Padding(
|
||||
padding: const EdgeInsets.fromLTRB(
|
||||
AppDimens.pageHorizontal,
|
||||
AppDimens.spaceSm,
|
||||
AppDimens.pageHorizontal,
|
||||
0,
|
||||
),
|
||||
child: Wrap(
|
||||
key: const Key('theater-language-chips'),
|
||||
spacing: 10,
|
||||
runSpacing: 10,
|
||||
children: [
|
||||
for (final entry in entries)
|
||||
_filterChip(
|
||||
key: Key('theater-language-${entry.$1.name}'),
|
||||
label: entry.$2,
|
||||
selected: logic.language == entry.$1,
|
||||
onSelected: () => logic.selectLanguage(entry.$1),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _filterChip({
|
||||
required Key key,
|
||||
required String label,
|
||||
|
||||
Reference in new issue
Block a user