Search packages, repositories and app categories

Package detailsv1.0.2+1

flutter_3d_objects

A Flutter package project that renders Wavefront's 3D object files.

AndroidiOSmacOSWindowsLinux
30-day downloads
2
Likes
5
Pub points
135

Install package

flutter pub add flutter_3d_objects

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

A Flutter package that enables rendering of Wavefront (.obj) 3D model files within Flutter applications. It supports multiple platforms including Android, iOS, macOS, Windows, and Linux, making it ideal for cross-platform 3D visualization. The package integrates seamlessly with Flutter's widget system, allowing developers to embed interactive 3D objects in their UIs. It is particularly useful for apps requiring 3D asset display, such as product previews, educational tools, or augmented reality experiences.

Use cases

  • 3D product visualization
  • Educational apps with 3D models
  • Augmented reality interfaces
  • Interactive 3D UI components
  • Game development prototypes

Key features

  • Supports Wavefront .obj files
  • Cross-platform compatibility
  • Integration with Flutter widgets
  • Lightweight and easy to use
  • Real-time 3D rendering

Suitable for

  • Developers building 3D-enabled Flutter apps
  • Educational software creators
  • Product showcase applications
  • AR/VR prototyping teams
  • UI designers exploring 3D elements

Considerations

  • Limited to .obj file format
  • No built-in animation support
  • Requires 3D model optimization
  • May have performance impact on low-end devices
  • No texture mapping out of the box

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

[Flutter 3D Objects]

pub package style: effective dart License: MIT

This package allows Flutter developers to easily display 3D models in their applications. It supports the .obj file format and provides functionalities to manipulate the scene, including setting camera positions and adding objects with child objects.

Features:

  • Display 3D models from .obj files
  • Add and manipulate objects within the scene
  • Set camera positions to adjust the view
  • Support for hierarchical object structures

Setup

How to use this

  • Add dependency in pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
flutter_3d_objects:
  • Add 3D Models in assets, file type should be .obj
flutter:
assets:
  - assets/p.obj
  - assets/c.obj

Usage

void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Cube(
            onSceneCreated: (Scene scene) {
              scene.world.add(
                Object(
                  fileName: 'assets/c.obj',
                  position: Vector3(1, 1, 1),
                  scale: Vector3(1, 1, 1),
                ),
              );
            },
          ),
        ),
      ),
    );
  }
}

Example

//Create a variable
late Scene _scene;
double x = 0;
double y = 3;
double z = 8;
late AnimationController _controller;
late Animation<double> _animation;
Object? _p;

// Create Function
void _onSceneCreated(Scene scene) {
   _scene = scene;
   scene.camera.position.z = z;
   scene.camera.position.y = y;
   scene.camera.position.x = x;
   _p = Object(
       position: Vector3(0, -2.5, 0),
       scale: Vector3(4, 4, 4),
       fileName: 'assets/p.obj',
       children: [
         Object(
           fileName: 'assets/c.obj',
           position: Vector3(0.25, 0.15, -0.24),
           scale: Vector3(0.8, 0.8, 0.8),
         ),
       ]);
   scene.world.add(_p!);
 }

//Function to rotate
void rotateLeft() {
   _animateRotation(90);
 }

 void rotateRight() {
   _animateRotation(-90);
 }

 void _animateRotation(double angle) {
   final double begin = _p!.rotation.y;
   final double end = _p!.rotation.y + angle;

   _animation = Tween<double>(begin: begin, end: end).animate(_controller)
     ..addListener(() {
       setState(() {
         _p!.rotation.y = _animation.value;
         _p!.updateTransform();
         _scene.update();
       });
     });

   _controller.forward(from: 0);
 }

// In main widget function
Scaffold(
     appBar: AppBar(
       title: const Text(''),
     ),
     body: Stack(
       children: [
         Cube(
           interactive: false,
           zoom: false,
           onSceneCreated: _onSceneCreated,
         ),
         Positioned(
           bottom: 10,
           left: 0,
           right: 0,
           child: Row(
             mainAxisAlignment: MainAxisAlignment.spaceEvenly,
             children: [
               ElevatedButton(
                 onPressed: rotateLeft,
                 child: const Text('Left'),
               ),
               ElevatedButton(
                 onPressed: rotateRight,
                 child: const Text('Right'),
               ),
             ],
           ),
         ),
       ],
     ),
   );

Categories

Dependencies

Dependency list 2 items

Source repository

Projects using this package

No data available yet.