0% found this document useful (0 votes)
7 views10 pages

InnerBhakti Project Guide

The document outlines the structure and code for the InnerBhakti Full Stack Project, which includes a Node.js backend and a Flutter frontend. It details the folder organization, backend API routes for managing programs, and Flutter screens for displaying program lists and details. Additionally, it provides code snippets for setting up the backend and frontend components, including audio playback functionality.

Uploaded by

Nisarga M K
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views10 pages

InnerBhakti Project Guide

The document outlines the structure and code for the InnerBhakti Full Stack Project, which includes a Node.js backend and a Flutter frontend. It details the folder organization, backend API routes for managing programs, and Flutter screens for displaying program lists and details. Additionally, it provides code snippets for setting up the backend and frontend components, including audio playback functionality.

Uploaded by

Nisarga M K
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

InnerBhakti Full Stack Project Guide

Folder Structure

InnerBhakti_Project/

+- backend/ # Node.js Backend

| +- models/ # Mongoose Models

| +- routes/ # API Routes

| +- index.js # Main Backend File

+- flutter_app/ # Flutter Frontend

| +- lib/

| +- main.dart # Flutter Entry Point

| +- screens/ # UI Screens

| +- program_list_screen.dart

| +- program_details_screen.dart

| +- audio_player_screen.dart

+- README.md # Instructions to Run the App

Backend Code (Node.js)

1. Create `backend/index.js`:

```javascript
const express = require('express');

const mongoose = require('mongoose');

const cors = require('cors');

const app = express();

app.use(cors());

app.use(express.json());

mongoose.connect('your-mongodb-uri', {

useNewUrlParser: true,

useUnifiedTopology: true,

});

const programSchema = new mongoose.Schema({

title: String,

image: String,

tracks: [{ title: String, audioUrl: String }],

});

const Program = mongoose.model('Program', programSchema);

app.get('/programs', async (req, res) => {

const programs = await Program.find();

res.json(programs);

});

app.get('/programs/:id', async (req, res) => {


const program = await Program.findById(req.params.id);

res.json(program);

});

app.listen(3000, () => console.log('Backend running on http://localhost:3000'));

```

Flutter Frontend Code

Create `flutter_app/lib/main.dart`:

```dart

import 'package:flutter/material.dart';

import 'screens/program_list_screen.dart';

void main() {

runApp(const InnerBhaktiApp());

class InnerBhaktiApp extends StatelessWidget {

const InnerBhaktiApp({super.key});

@override

Widget build(BuildContext context) {

return MaterialApp(

title: 'InnerBhakti',
theme: ThemeData(primarySwatch: Colors.blue),

home: ProgramListScreen(),

);

```

Flutter Screens

`program_list_screen.dart`:

```dart

import 'package:flutter/material.dart';

import 'dart:convert';

import 'package:http/http.dart' as http;

import 'program_details_screen.dart';

class ProgramListScreen extends StatefulWidget {

@override

_ProgramListScreenState createState() => _ProgramListScreenState();

class _ProgramListScreenState extends State<ProgramListScreen> {

List programs = [];

@override
void initState() {

super.initState();

fetchPrograms();

fetchPrograms() async {

final response = await http.get(Uri.parse('http://localhost:3000/programs'));

setState(() {

programs = jsonDecode(response.body);

});

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(title: const Text('Programs')),

body: ListView.builder(

itemCount: programs.length,

itemBuilder: (context, index) {

return ListTile(

title: Text(programs[index]['title']),

onTap: () {

Navigator.push(

context,

MaterialPageRoute(

builder: (context) => ProgramDetailsScreen(programId: programs[index]['_id']),

),
);

},

);

},

),

);

```

`program_details_screen.dart`:

```dart

import 'package:flutter/material.dart';

import 'dart:convert';

import 'package:http/http.dart' as http;

import 'audio_player_screen.dart';

class ProgramDetailsScreen extends StatelessWidget {

final String programId;

ProgramDetailsScreen({required this.programId});

Future<Map<String, dynamic>> fetchProgramDetails() async {

final response = await http.get(Uri.parse('http://localhost:3000/programs/$programId'));

return jsonDecode(response.body);

@override
Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(title: const Text('Program Details')),

body: FutureBuilder(

future: fetchProgramDetails(),

builder: (context, snapshot) {

if (snapshot.connectionState == ConnectionState.waiting) {

return const Center(child: CircularProgressIndicator());

final program = snapshot.data as Map<String, dynamic>;

return ListView(

children: program['tracks'].map<Widget>((track) {

return ListTile(

title: Text(track['title']),

onTap: () {

Navigator.push(

context,

MaterialPageRoute(

builder: (context) => AudioPlayerScreen(audioUrl: track['audioUrl']),

),

);

},

);

}).toList(),

);

},
),

);

```

`audio_player_screen.dart`:

```dart

import 'package:flutter/material.dart';

import 'package:audioplayers/audioplayers.dart';

class AudioPlayerScreen extends StatefulWidget {

final String audioUrl;

AudioPlayerScreen({required this.audioUrl});

@override

_AudioPlayerScreenState createState() => _AudioPlayerScreenState();

class _AudioPlayerScreenState extends State<AudioPlayerScreen> {

final AudioPlayer player = AudioPlayer();

@override

void initState() {

super.initState();

player.setUrl(widget.audioUrl);

}
@override

void dispose() {

player.dispose();

super.dispose();

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(title: const Text('Audio Player')),

body: Center(

child: Column(

mainAxisAlignment: MainAxisAlignment.center,

children: [

ElevatedButton(

onPressed: () => player.play(widget.audioUrl),

child: const Text('Play'),

),

ElevatedButton(

onPressed: () => player.pause(),

child: const Text('Pause'),

),

],

),

),

);
}

```

You might also like