Untitled
unknown
dart
4 years ago
4.9 kB
11
Indexable
import 'package:flutter/material.dart';
import 'package:watchlist_practice/data/api/api_service.dart';
import 'package:watchlist_practice/data/model/searched_movies.dart';
import 'package:watchlist_practice/ui/moviedetails/movie_details.dart';
import 'package:watchlist_practice/widgets/list_tiles.dart';
class SearchMovies extends StatefulWidget {
const SearchMovies({Key? key}) : super(key: key);
@override
State<SearchMovies> createState() => _SearchMoviesState();
}
class _SearchMoviesState extends State<SearchMovies> {
final editingController = TextEditingController();
String query = '';
ApiService getApi = ApiService();
late Future<SearchedMovies> _apiData;
@override
void initState() {
_apiData = getApi.getSearchedMoviesList(query);
setState(() {
editingController.text = '';
});
super.initState();
}
@override
Widget build(BuildContext context) {
Widget searchField() {
return Container(
margin: EdgeInsets.symmetric(
horizontal: 12.0,
vertical: 12.0,
),
child: TextField(
controller: editingController,
onSubmitted: (value) {
setState(() {
query = editingController.text;
_apiData = getApi.getSearchedMoviesList(query);
});
},
decoration: InputDecoration(
prefixIcon: Icon(Icons.search),
hintText: "Search for Movies",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8.0),
borderSide: BorderSide(color: Colors.blue),
)),
),
);
}
Widget _listSearchMovies() {
return Flexible(
child: FutureBuilder<SearchedMovies>(
future: _apiData,
builder: (context, snapshot) {
var data = snapshot.data;
if (data == null) {
return Center(
child: Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.search,
size: 150.0,
color: Colors.grey,
),
Text(
'Searched Movies\nwill Displayed Here!',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20.0,
color: Colors.grey,
),
),
],
),
),
);
} else if (data.totalResults == 0) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.error,
color: Colors.grey,
size: 50.0,
),
Text(
'No Movies Found!',
style: TextStyle(
fontSize: 22.0,
color: Colors.grey,
),
),
],
),
);
} else if (!snapshot.hasData) {
Center(
child: CircularProgressIndicator(),
);
}
return ListView.builder(
itemCount: data.results.length,
itemBuilder: (context, index) {
return InkWell(
onTap: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (context) {
return MovieDetails(
movieId: data.results[index].id.toString());
}));
},
child: ListTiles(
imageUrl: data.results[index].posterPath,
movieTitle: data.results[index].title,
movieRating:
data.results[index].voteAverage.toString()),
);
});
}));
}
return Scaffold(
body: SafeArea(
child: Column(
children: [
searchField(),
_listSearchMovies(),
],
),
),
);
}
}
Editor is loading...