add: actor box

This commit is contained in:
Erfan Rahmati
2022-09-02 11:06:34 +04:30
parent ae2ee8638a
commit dd4edda6ba
5 changed files with 87 additions and 15 deletions

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:movielab/models/actor_models/actor_preview_model.dart';
import 'package:movielab/models/hive/models/show_preview.dart';
import 'package:movielab/models/show_models/show_preview_model.dart';
import 'package:movielab/models/user_model/user_model.dart';
@@ -145,6 +146,11 @@ ShowPreview convertFullShowToShowPreview({required FullShow fullShow}) {
);
}
ActorPreview convertShowPreviewToActorPreview({required ShowPreview show}) {
return ActorPreview(
id: show.id, name: show.title, image: show.image, asCharacter: "");
}
Future<String> getShowCrew({required FullShow fullShow}) async {
List<String> crewList = [];
String crew = "";

View File

@@ -1,15 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:movielab/models/actor_models/actor_preview_model.dart';
import 'package:movielab/modules/tools/navigate.dart';
import 'package:movielab/pages/actor/actor_page/actor_page.dart';
import 'package:movielab/pages/show/show_box/show_box_common.dart';
import '../../../models/actor_models/actor_preview_model.dart';
class ShowActorBox extends StatelessWidget {
class CompressedActorBox extends StatelessWidget {
final ActorPreview actor;
const ShowActorBox({Key? key, required this.actor}) : super(key: key);
const CompressedActorBox({Key? key, required this.actor}) : super(key: key);
@override
Widget build(BuildContext context) {

View File

@@ -0,0 +1,57 @@
import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:movielab/models/actor_models/actor_preview_model.dart';
import 'package:movielab/modules/tools/navigate.dart';
import 'package:movielab/pages/actor/actor_page/actor_page.dart';
import 'package:movielab/pages/show/show_box/show_box_common.dart';
class ExpandedActorBox extends StatelessWidget {
final ActorPreview actor;
final String preTag;
const ExpandedActorBox({Key? key, required this.actor, this.preTag = ""})
: super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 7.5),
child: InkWell(
onTap: () {
Navigate.pushHeroicTo(context, ActorPage(id: actor.id));
},
borderRadius: BorderRadius.circular(15),
child: Container(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 7.5),
width: MediaQuery.of(context).size.width - 40,
child: Row(
children: [
boxImage(
image: actor.image,
tag: "actor_${actor.id}",
width: 70,
height: 70,
radius: 100,
placeholder: const SpinKitThreeBounce(
color: Colors.white,
size: 15.0,
),
),
const SizedBox(
width: 10,
),
Text(actor.name,
textAlign: TextAlign.center,
maxLines: 2,
overflow: TextOverflow.ellipsis,
softWrap: true,
style: const TextStyle(
color: Colors.white,
fontSize: 15,
fontWeight: FontWeight.w700)),
],
),
),
),
);
}
}

View File

@@ -3,6 +3,8 @@ import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:get/get.dart';
import 'package:movielab/constants/colors.dart';
import 'package:movielab/constants/types.dart';
import 'package:movielab/models/hive/convertor.dart';
import 'package:movielab/pages/actor/actor_box/expanded_actor_box.dart';
import 'package:movielab/pages/main/main_controller.dart';
import 'package:movielab/pages/main/search/search.dart';
import 'package:movielab/pages/main/search/search_bar/search_bar.dart';
@@ -59,13 +61,16 @@ class SearchPage extends StatelessWidget {
children: [
AnimatedSwitcher(
duration: const Duration(milliseconds: 200),
child: _buildBody(_.movieResult, _.loadingStatus)),
child:
_buildBody("movies", _.movieResult, _.loadingStatus)),
AnimatedSwitcher(
duration: const Duration(milliseconds: 200),
child: _buildBody(_.seriesResult, _.loadingStatus)),
child:
_buildBody("series", _.seriesResult, _.loadingStatus)),
AnimatedSwitcher(
duration: const Duration(milliseconds: 200),
child: _buildBody(_.peopleResult, _.loadingStatus))
child:
_buildBody("people", _.peopleResult, _.loadingStatus))
],
),
),
@@ -74,7 +79,7 @@ class SearchPage extends StatelessWidget {
);
}
Widget _buildBody(result, loadingStatus) {
Widget _buildBody(tab, result, loadingStatus) {
switch (loadingStatus) {
case RequestResult.NOT_STARTED:
return Center(
@@ -114,10 +119,16 @@ class SearchPage extends StatelessWidget {
physics: const BouncingScrollPhysics(),
controller: _.searchScrollController,
itemBuilder: (context, index) {
return ExpandedItemBox(
showPreview: result![index],
preTag: "Search_page_",
);
return tab != "people"
? ExpandedItemBox(
showPreview: result![index],
preTag: "Search_page_",
)
: ExpandedActorBox(
actor: convertShowPreviewToActorPreview(
show: result![index]),
preTag: "Search_page_",
);
},
);
},

View File

@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
import 'package:movielab/pages/actor/actor_box/actor_box.dart';
import 'package:movielab/pages/actor/actor_box/compressed_actor_box.dart';
import '../../../../widgets/section_title.dart';
@@ -26,7 +26,7 @@ class ShowPageCast extends StatelessWidget {
scrollDirection: Axis.horizontal,
itemCount: actorList.length,
itemBuilder: (context, index) {
return ShowActorBox(actor: actorList[index]);
return CompressedActorBox(actor: actorList[index]);
},
),
),