Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'package:cloud_firestore/cloud_firestore.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
- import 'package:learnship/pages/courselist_page/courselist_page.dart';
- import 'package:learnship/pages/home_page/search_page.dart';
- import 'package:youtube_api/youtube_api.dart';
- class HomePage extends StatefulWidget {
- HomePage({Key key}) : super(key: key);
- @override
- _HomePageState createState() => _HomePageState();
- }
- class _HomePageState extends State<HomePage> {
- static String key = "AIzaSyB5Spz0ROPoQ0J1HsorKOldqIsEeshMaSk";
- TextEditingController searchController = TextEditingController();
- YoutubeAPI ytApi = YoutubeAPI(key);
- List<YT_API> ytResult = [];
- callAPI() async {
- ytResult = await ytApi.search(searchController.text);
- // ytResult = await ytApi.nextPage();
- // ytResult = await ytApi.nextPage();
- setState(() {});
- }
- @override
- void initState() {
- super.initState();
- //callAPI();
- print('hello');
- }
- List<String> imageList = [
- 'assets/course_image/Data Structures.jpg',
- 'assets/course_image/database_1.jpg',
- 'assets/course_image/Database.jpg',
- 'assets/course_image/flutter.jpg',
- 'assets/course_image/ML.jpg'
- ];
- final List<dynamic> _videoUrls = [];
- @override
- Widget build(BuildContext context) {
- Size size = MediaQuery.of(context).size;
- return Scaffold(
- backgroundColor: Color(0xFFF8F8F8),
- body: Column(
- children: [
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Spacer(
- flex: 1,
- ),
- Text(
- 'Hi, Parth!',
- style: TextStyle(
- fontSize: size.height * 0.04,
- fontWeight: FontWeight.bold,
- ),
- ),
- Spacer(
- flex: 9,
- ),
- CircleAvatar(
- radius: size.height * 0.04,
- backgroundImage: AssetImage('assets/course_image/Parth.jpg'),
- ),
- Spacer(
- flex: 2,
- ),
- ],
- ), // Header
- Container(
- padding: EdgeInsets.all(10),
- // padding: EdgeInsets.only(top: 8, bottom: 8),
- margin: EdgeInsets.only(left: 8, right: 8),
- child: Material(
- elevation: 10.0,
- borderRadius: BorderRadius.all(Radius.circular(30.0)),
- child: TextField(
- controller: searchController,
- style: TextStyle(color: Colors.black, fontSize: 22.0),
- cursorColor: Theme.of(context).primaryColor,
- decoration: InputDecoration(
- contentPadding:
- EdgeInsets.symmetric(horizontal: 32.0, vertical: 14.0),
- prefixIcon: InkWell(
- onTap: () {
- Navigator.push(
- context,
- MaterialPageRoute(
- builder: (context) => SearchPage(
- searchQuery: searchController.text,
- ytApi: ytApi,
- ),
- ),
- );
- },
- child: Icon(
- Icons.search,
- color: Colors.black,
- ),
- ),
- border: InputBorder.none,
- hintText: "Search"),
- ),
- ),
- ), //Search Bar
- _space,
- Expanded(
- child: Container(
- margin: EdgeInsets.all(12),
- child: StreamBuilder(
- stream: FirebaseFirestore.instance
- .collection("courses")
- .snapshots(),
- builder: (BuildContext context,
- AsyncSnapshot<QuerySnapshot> snapshot) {
- return !snapshot.hasData
- ? Center(
- child: CircularProgressIndicator(),
- )
- : StaggeredGridView.countBuilder(
- crossAxisCount: 2,
- shrinkWrap: true,
- crossAxisSpacing: 12,
- mainAxisSpacing: 12,
- itemCount: snapshot.data.docs.length,
- itemBuilder: (context, index) {
- DocumentSnapshot courses =
- snapshot.data.docs[index];
- List<dynamic> videoUrls = _videoUrls
- .map<String>((e) => e.toString())
- .toList();
- return Column(
- children: [
- Expanded(
- child: GestureDetector(
- onTap: () {
- Navigator.push(
- context,
- MaterialPageRoute(
- builder: (context) =>
- CourseListPage(
- courses: courses,
- videoUrls: videoUrls,
- ),
- ),
- );
- },
- child: ClipRRect(
- borderRadius: BorderRadius.all(
- Radius.circular(12)),
- child: Image.network(courses['imgUrl'],
- fit: BoxFit.cover,
- height: size.height * 0.3),
- ),
- ),
- ),
- Row(
- mainAxisSize: MainAxisSize.max,
- mainAxisAlignment:
- MainAxisAlignment.spaceBetween,
- children: [
- SizedBox(
- width: 3,
- ),
- Expanded(
- child: Text(
- courses['courseTitle'],
- style: TextStyle(
- fontWeight: FontWeight.bold),
- softWrap: true,
- maxLines: 3,
- overflow: TextOverflow.ellipsis,
- ),
- ),
- ],
- ),
- ],
- );
- },
- staggeredTileBuilder: (index) {
- return new StaggeredTile.count(
- 1, index.isEven ? 1.2 : 1.8);
- },
- );
- }),
- ),
- ),
- ],
- ),
- );
- }
- Widget get _space => const SizedBox(height: 10);
- }
Advertisement
Add Comment
Please, Sign In to add comment