hycop_multi_platform 0.6.1 copy "hycop_multi_platform: ^0.6.1" to clipboard
hycop_multi_platform: ^0.6.1 copied to clipboard

Hycop Framework

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:logging/logging.dart';
import 'package:hycop_multi_platform/hycop.dart';

//아래 다섯개는 잘 빌드 됨 의미 없음
// import 'package:creta_common/creta_common.dart';
// import 'package:creta_studio_io/creta_studio_io.dart';
// import 'package:creta_studio_model/creta_studio_model.dart';
// import 'package:creta_user_io/creta_user_io.dart';
// import 'package:creta_user_model/creta_user_model.dart';

//문제를 이르키는 코드 실제로 import 하는 구문
//creta_common **
// import 'package:creta_common/common/creta_common_utils.dart';
// import 'package:creta_common/common/cross_common_job_stub.dart';
//creta_studio_io
//creta_studio_model **
//import 'package:creta_studio_model/model/contents_model.dart';
//creta_user_io
//creta_user_model

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Hycop Multi Platform',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Hycop Multi Platform'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _hycopInitResult = 'not initialize';
  String _createAccountResult = '[empty]';
  final String _loginAccountResult = '[empty]';
  String _deleteAccountResult = '[empty]';
  String _setDataResult = '[empty]';
  String _getDataResult = '[empty]';
  String _deleteDataResult = '[empty]';
  String _uploadStorageResult = '[empty]';
  String _downloadStorageResult = '[empty]';
  Uint8List? _downloadUint8List;

  double _mouseX = 0;
  double _mouseY = 0;
  int _lastRealtime = DateTime.now().millisecondsSinceEpoch;

  String _getNowString() {
    return DateTime.now().toString();
  }

  Future<void> _hycopInit() async {
    setupLogger();
    Logger.root.level = Level.INFO;
    HycopFactory.serverType = ServerType.firebase;
    setState(() {
      _hycopInitResult = '[${_getNowString()}] initializing...';
    });
    await HycopFactory.initAll();
    setState(() {
      _hycopInitResult = '[${_getNowString()}] initialized';
    });
  }

  Future<void> _createAccount() async {
    Map<String, dynamic> userData = {
      'accountSignUpType': AccountSignUpType.hycop.index,
      'password': '-507263a',
      'email': 'HycopTestUser@nomail.com',
    };
    AccountManager.createAccount(userData).then((value) {
      // success
      setState(() {
        _createAccountResult = '[${_getNowString()}] ${userData['email']} account created';
      });
    }).catchError(
      (error, stackTrace) {
        // error
        setState(() {
          _createAccountResult =
              '[${_getNowString()}] fail to create account !!!\n${error.toString()}';
        });
      },
    );
  }

  Future<void> _loginAccount() async {
    String password = '-507263a';
    String email = 'HycopTestUser@nomail.com';
    AccountManager.login(email, password).then((value) {
      // success
      setState(() {
        _createAccountResult = '[${_getNowString()}] $email logined';
      });
    }).catchError(
      (error, stackTrace) {
        // error
        setState(() {
          _createAccountResult = '[${_getNowString()}] fail to login !!!\n${error.toString()}';
        });
      },
    );
  }

  Future<void> _deleteAccount() async {
    String email = AccountManager.currentLoginUser.email;
    HycopFactory.account!.deleteAccount(deleteNow: true).then((value) {
      // success
      setState(() {
        _deleteAccountResult = '[${_getNowString()}] $email account deleted';
      });
    }).catchError(
      (error, stackTrace) {
        // error
        setState(() {
          _deleteAccountResult =
              '[${_getNowString()}] fail to delete account !!!\n${error.toString()}';
        });
      },
    );
  }

  Future<void> _getDataFromDB() async {
    var userDataList = await HycopFactory.dataBase
        ?.queryData('hycop_users', where: {'email': 'test'}, orderBy: 'email');
    if (userDataList?.isEmpty ?? true) {
      setState(() {
        _getDataResult = '[${_getNowString()}] no data';
      });
      return;
    }
    setState(() {
      _getDataResult = '[${_getNowString()}] ';
      for (var userData in userDataList!) {
        _getDataResult += 'users=${userData['email']?.toString()},';
      }
    });
  }

  Future<void> _setDataToDB() async {
    Map<String, dynamic> userData = {'userId': 'test', 'email': 'test', 'accountSignUpType': 0};
    await HycopFactory.dataBase!.createData('hycop_users', 'user=test', userData).then((value) {
      // success
      setState(() {
        _setDataResult = '[${_getNowString()}] create successfully';
      });
    }).catchError(
      (error, stackTrace) {
        // error
        setState(() {
          _setDataResult = '[${_getNowString()}] fail to create !!!\n${error.toString()}';
        });
      },
    );
  }

  Future<void> _deleteDataFromDB() async {
    await HycopFactory.dataBase!.removeData('hycop_users', 'user=test').then((value) {
      // success
      setState(() {
        _deleteDataResult = '[${_getNowString()}] delete successfully';
      });
    }).catchError(
      (error, stackTrace) {
        // error
        setState(() {
          _deleteDataResult = '[${_getNowString()}] fail to delete !!!\n${error.toString()}';
        });
      },
    );
  }

  Future<void> _downloadDataFromStorage() async {
    HycopFactory.storage!.setBucket();
    String fileId = 'HycopTest/content/image/a6de38b7f004ea361acfbc9ed98a447eHycopTestImage.png';
    setState(() {
      _downloadUint8List = null;
      _downloadStorageResult = 'downloading...';
    });

    HycopFactory.storage!.getFileBytes(fileId).then((value) {
      // success
      setState(() {
        _downloadUint8List = value;
        if (_downloadUint8List == null) {
          _downloadStorageResult = '[${_getNowString()}] fail to download !!!';
        }
      });
    }).catchError(
      (error, stackTrace) {
        // error
        setState(() {
          _deleteDataResult = '[${_getNowString()}] fail to delete !!!\n${error.toString()}';
        });
      },
    );
  }

  Future<void> _uploadDataToStorage() async {
    setState(() {
      _uploadStorageResult = 'uploading...';
    });
    HycopFactory.storage!.setBucket();
    String fileName = 'HycopTestImage.png';
    String fileType = 'image';
    final ByteData bytes = await rootBundle.load('assets/logo.png');
    final Uint8List fileBytes = bytes.buffer.asUint8List();
    FileModel? fileModel = await HycopFactory.storage!.uploadFile(
      fileName,
      fileType,
      fileBytes,
      makeThumbnail: true,
      bucketId: 'HycopTest',
    );
    setState(() {
      _uploadStorageResult =
          (fileModel == null) ? '[${_getNowString()}] fail to upload !!!' : fileModel.id;
    });
  }

  void _updateLocation(PointerEvent details) {
    int nowMilliseconds = DateTime.now().millisecondsSinceEpoch;
    setState(() {
      _mouseX = details.position.dx;
      _mouseY = details.position.dy;
    });
    if (nowMilliseconds - _lastRealtime > 1000) {
      _lastRealtime = nowMilliseconds;
      //
      // update DB code !!!!
      //
    }
  }

  Future<void> _uploadDataToRealtime() async {
    HycopFactory.realtime!.startTemp('Test=hycoptest');
    //HycopFactory.realtime!.setPrefix('creta');
  }

  Future<void> _downloadDataFromRealtime() async {}

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: SingleChildScrollView(
        child: MouseRegion(
          onHover: _updateLocation,
          child: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                // init hycop
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _hycopInit();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Hycop init'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Text(_hycopInitResult),
                ),

                // create account
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _createAccount();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Create account'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Text(_createAccountResult),
                ),

                // login account
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _loginAccount();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Login account'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Text(_loginAccountResult),
                ),

                // delete account
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _deleteAccount();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Create account'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Text(_deleteAccountResult),
                ),

                // get db
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _getDataFromDB();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Get data from DB'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Text(_getDataResult),
                ),
                // set db
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _setDataToDB();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Set data To DB'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Text(_setDataResult),
                ), // get
                // delete db
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _deleteDataFromDB();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Delete data To DB'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Text(_deleteDataResult),
                ),
                // download from storage
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _downloadDataFromStorage();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Download data from Storage'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: _downloadUint8List == null
                      ? Text(_downloadStorageResult)
                      : Container(
                          color: Colors.black,
                          child: Image.memory(
                            _downloadUint8List!,
                            width: 200,
                          )),
                ),
                // upload to storage
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _uploadDataToStorage();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Upload data to Storage'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Text(_uploadStorageResult),
                ),
                // upload realtime
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _uploadDataToRealtime();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Upload data to Storage'),
                    ),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Text('X:$_mouseX, Y:$_mouseY'),
                ),
                Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: TextButton(
                    style: ButtonStyle(backgroundColor: WidgetStateProperty.all(Colors.grey[300])),
                    onPressed: () async {
                      await _downloadDataFromRealtime();
                    },
                    child: const Padding(
                      padding: EdgeInsets.all(8.0),
                      child: Text('Upload data to Storage'),
                    ),
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}