drydart / model_viewer.dart

A Flutter widget for rendering interactive 3D models in the glTF and GLB formats.
https://pub.dev/packages/model_viewer
The Unlicense
209 stars 101 forks source link

SIMPLE CODE FOR CACHE SUPPORT (LOAD THE MODEL 40% FASTER) #16

Open seel-channel opened 3 years ago

seel-channel commented 3 years ago

CACHE SUPPORT WITH FLUTTER CACHE MANAGER

import 'package:flutter/material.dart';
import 'package:pedantic/pedantic.dart';
import 'package:model_viewer/model_viewer.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';

...

@override
  Widget build(BuildContext context) {
    return FutureBuilder<String>(
      future: chached3DSrc(src),
      builder: (__, AsyncSnapshot<String> snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          return ModelViewer(
            src: snapshot.data,
            autoPlay: true,
            autoRotate: true,
            autoRotateDelay: 0,
            cameraControls: true,
          );
        } else {
          return SizedBox();
        }
      },
    );
  }

  Future<String> chached3DSrc(String source) async {
    final BaseCacheManager _cacheManager = DefaultCacheManager();
    final fileInfo = await _cacheManager.getFileFromCache(source);

    if (fileInfo == null || fileInfo.file == null) {
      unawaited(_cacheManager.downloadFile(source));
      return source;
    } else {
      return "file://" + fileInfo.file.path;
    }
  }