flutter_piano_pro 0.2.0
flutter_piano_pro: ^0.2.0 copied to clipboard
flutter_piano_pro is a Flutter package that provides a customizable piano widget.
Flutter Piano Pro #
Flutter Piano Pro is a piano widget for flutter applications. It provides a configurable keyboard interface, allowing users to interact with piano notes and receive event callbacks for their interactions.
Installation #
Add flutter_piano_pro
as a dependency in your pubspec.yaml file:
dependencies:
flutter_piano_pro: ^0.2.0
Usage #
Import flutter_piano_pro.dart
and note_names.dart
files:
import 'package:flutter_piano_pro/flutter_piano_pro.dart';
import 'package:flutter_piano_pro/note_names.dart';
In your widget tree, use the PianoPro
widget to add the piano:
import 'package:flutter/material.dart';
import 'package:flutter_piano_pro/flutter_piano_pro.dart';
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Flutter Piano Pro Demo"),
),
body: Center(
child: PianoPro(
),
),
);
}
}
Configuration #
noteCount
- The number of notes to display on the piano.totalWidth
- The total width of the piano. IfexpandHorizontal
is set tofalse
, this will be the fixed width of the piano. IfexpandHorizontal
is set totrue
, this is ignored.expandHorizontal
- Iftrue
, the piano will expand horizontally to fill the available space. Iffalse
, the piano will have a fixed width defined bytotalWidth
.buttonHeight
- The height of the piano keys.showNames
- Iftrue
, note names will be displayed on the keys.showOctaveNumber
- Iftrue
, octave numbers will be displayed on the keys.firstNote
- The index of the first note to display.0
= C(Do).firstNoteOctave
- The octave of the first note to display.noteType
- The type of notes to display (NoteType.english
,NoteType.romanian
etc.).onTapDown
- A function that is called when a note is tapped. TheNoteModel
of the tapped note is passed as the first argument, and the pointer ID is passed as the second argument.onTapUpdate
- A function that is called when a pointer that is already down moves. TheNoteModel
of the updated note is passed as the first argument, and the pointer ID is passed as the second argument.onTapUp
- A function that is called when a note is released. The pointer ID is passed as the argument.
Example Usage #
Here's an example of how you might use PianoPro
in your Flutter app:
import 'package:flutter/material.dart';
import 'package:flutter_piano_pro/flutter_piano_pro.dart';
import 'package:flutter_piano_pro/note_model.dart';
import 'package:flutter_piano_pro/note_names.dart';
main() {runApp(const MyHomePage());}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
MyHomePageState createState() => MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
Map<int, NoteModel> pointerAndNote = {};
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text("Flutter Piano Pro Demo"),
),
body: Column(
children: [
child: PianoPro(
noteCount: 7, // Without black keys
totalWidth: 500,
expandHorizontal:
true, // if it's true, totalWidth = constraits.maxWidth
buttonHeight: 250,
showNames: true,
showOctaveNumber: true,
firstNote: 0, // C
firstNoteOctave: 3,
noteType: NoteType.english, // A, B, C, D, E, F, G
onTapDown: (note, tapId) {
if (note == null) return;
setState(() => pointerAndNote[tapId] = note);
debugPrint(
'DOWN: note= ${note.name + note.octave.toString() + (note.isFlat ? "♭" : '')}, tapId= $tapId');
},
onTapUpdate: (note, tapId) {
if (note == null) return;
if (pointerAndNote[tapId] == note) return;
setState(() => pointerAndNote[tapId] = note);
debugPrint(
'UPDATE: note= ${note.name + note.octave.toString() + (note.isFlat ? "♭" : '')}, tapId= $tapId');
},
onTapUp: (tapId) {
setState(() => pointerAndNote.remove(tapId));
debugPrint('UP: tapId= $tapId');
},
),
Expanded(
child: ListView.builder(
itemCount: pointerAndNote.length,
itemBuilder: (BuildContext context, int index) {
final keys = pointerAndNote.keys.toList();
return ListTile(
title: Text(
"${pointerAndNote[keys[index]]!.name}${pointerAndNote[keys[index]]!.octave}${pointerAndNote[keys[index]]!.isFlat ? "♭" : ''}",
textAlign: TextAlign.center,
),
);
},
),
),
],
),
),
);
}
}
In this example, we've created a simple app that displays a piano keyboard using PianoPro
. We've also added a ListView
below the keyboard to display the notes that are currently being pressed.
Contributions #
Contributions are welcome! Please feel free to submit a PR or open an issue.
Contact #
If you have any questions or suggestions, feel free to contact the package maintainer, Melih Hakan Pektas, via email or through GitHub.
Thank you for contributing to flutter_piano_pro!
License #
This project is licensed under the MIT License. See the LICENSE file for details.