搜尋套件、儲存庫與 APP 分類

套件詳情v0.0.8

social_media_audio_recorder

一個用於建立類似其他社群媒體的動畫語音錄製器的 Flutter 套件。

AndroidiOS
近 30 天下載
43
喜歡數
27
Pub 分數
130

安裝套件

flutter pub add social_media_audio_recorder

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

一個專為創建類似流行社交媒體平台上的動畫語音錄音器而設計的Flutter套件。它提供了一個視覺上吸引人的錄音介面,搭配順暢的動畫效果,非常適合強調互動式音訊內容的應用程式。此套件支援Android與iOS,確保跨平台相容性。開發者可輕鬆將其整合至自己的應用中,透過直觀的音訊錄製功能提升使用者體驗。

適用情境

  • 社交媒體應用開發
  • 語音訊息分享功能
  • 互動音頻內容創作
  • 即時錄製動畫
  • 行動應用音訊整合

主要特色

  • 動畫語音錄音機介面
  • 跨平台支援(Android 與 iOS)
  • 與 Flutter 的簡單整合
  • 即時錄製可視化
  • 可自訂的錄製介面

適合對象

  • 開發社交媒體應用的開發者
  • 需要引人入勝的音頻互動的應用程式
  • 專注於多媒體功能的Flutter專案
  • 語音內容平台的創作者
  • 尋求現成音訊組件的移動應用團隊

使用建議

  • 需要麥克風存取權限
  • 可能需要額外的樣式以實現品牌一致
  • 超出核心動畫的自訂功能有限
  • 依賴於平台特定的音訊權限
  • 最適合簡單的錄音工作流程

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

https://user-images.githubusercontent.com/75131816/222947676-e48a8e88-4b5f-4847-ae65-3ca40145b53c.mp4

Android
  1. For Permission Handle:

Upgrade pre 1.12 Android projects

Since version 4.4.0 this plugin is implemented using the Flutter 1.12 Android plugin APIs. Unfortunately this means App developers also need to migrate their Apps to support the new Android infrastructure. You can do so by following the Upgrading pre 1.12 Android projects migration guide. Failing to do so might result in unexpected behaviour. Most common known error is the permission_handler not returning after calling the .request() method on a permission.

AndroidX

As of version 3.1.0 the permission_handler plugin switched to the AndroidX version of the Android Support Libraries. This means you need to make sure your Android project is also upgraded to support AndroidX. Detailed instructions can be found here.

The TL;DR version is:

  1. Add the following to your "gradle.properties" file:
android.useAndroidX=true
android.enableJetifier=true
  1. Make sure you set the compileSdkVersion in your "android/app/build.gradle" file to 33:
android {
  compileSdkVersion 33
  ...
}
  1. Make sure you replace all the android. dependencies to their AndroidX counterparts (a full list can be found here).

Add permissions to your AndroidManifest.xml file. There's a debug, main and profile version which are chosen depending on how you start your app. In general, it's sufficient to add permission only to the main version. Here's an example AndroidManifest.xml with a complete list of all possible permissions.

  1. For Record Permission:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Optional, you'll have to check this permission by yourself. -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • min SDK: 19 (maybe higher => encoder dependent)
  1. For Vibrate Permission:

    Make sure you add the following permissions to your Android Manifest

    <uses-permission android:name="android.permission.VIBRATE"/>
    
iOS
  1. For Permission Handle:

    Add permission to your Info.plist file. Here's an example Info.plist with a complete list of all possible permissions.

    IMPORTANT: You will have to include all permission options when you want to submit your App. This is because the permission_handler plugin touches all different SDKs and because the static code analyser (run by Apple upon App submission) detects this and will assert if it cannot find a matching permission option in the Info.plist. More information about this can be found here.

    The permission_handler plugin use [macros](https://github.com/Baseflow/flutter-permission- handler/blob/master/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h) to control whether a permission is enabled.

    You must list permission you want to use in your application :

  2. Add the following to your Podfile file:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        ... # Here are some configurations automatically generated by flutter
    
        # Start of the permission_handler configuration
        target.build_configurations.each do |config|
    
          # You can enable the permissions needed here. For example to enable camera
          # permission, just remove the `#` character in front so it looks like this:
          #
          # ## dart: PermissionGroup.camera
          # 'PERMISSION_CAMERA=1'
          #
          #  Preprocessor definitions can be found in: https://github.com/Baseflow/flutter-permission-handler/blob/master/permission_handler_apple/ios/Classes/PermissionHandlerEnums.h
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
            '$(inherited)',
    
            ## dart: PermissionGroup.calendar
            # 'PERMISSION_EVENTS=1',
    
            ## dart: PermissionGroup.reminders
            # 'PERMISSION_REMINDERS=1',
    
            ## dart: PermissionGroup.contacts
            # 'PERMISSION_CONTACTS=1',
    
            ## dart: PermissionGroup.camera
            # 'PERMISSION_CAMERA=1',
    
            ## dart: PermissionGroup.microphone
            # 'PERMISSION_MICROPHONE=1',
    
            ## dart: PermissionGroup.speech
            # 'PERMISSION_SPEECH_RECOGNIZER=1',
    
            ## dart: PermissionGroup.photos
            # 'PERMISSION_PHOTOS=1',
    
            ## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
            # 'PERMISSION_LOCATION=1',
           
            ## dart: PermissionGroup.notification
            # 'PERMISSION_NOTIFICATIONS=1',
    
            ## dart: PermissionGroup.mediaLibrary
            # 'PERMISSION_MEDIA_LIBRARY=1',
    
            ## dart: PermissionGroup.sensors
            # 'PERMISSION_SENSORS=1',   
            
            ## dart: PermissionGroup.bluetooth
            # 'PERMISSION_BLUETOOTH=1',
    
            ## dart: PermissionGroup.appTrackingTransparency
            # 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
    
            ## dart: PermissionGroup.criticalAlerts
            # 'PERMISSION_CRITICAL_ALERTS=1'
          ]
    
        end 
        # End of the permission_handler configuration
      end
    end
    
  3. Remove the # character in front of the permission you do want to use. For example if you need access to the calendar make sure the code looks like this:

            ## dart: PermissionGroup.calendar
            'PERMISSION_EVENTS=1',
    
  4. Delete the corresponding permission description in Info.plist e.g. when you don't need camera permission, just delete 'NSCameraUsageDescription' The following lists the relationship between Permission and The key of Info.plist:

    Permission Info.plist Macro
    PermissionGroup.calendar NSCalendarsUsageDescription PERMISSION_EVENTS
    PermissionGroup.reminders NSRemindersUsageDescription PERMISSION_REMINDERS
    PermissionGroup.contacts NSContactsUsageDescription PERMISSION_CONTACTS
    PermissionGroup.camera NSCameraUsageDescription PERMISSION_CAMERA
    PermissionGroup.microphone NSMicrophoneUsageDescription PERMISSION_MICROPHONE
    PermissionGroup.speech NSSpeechRecognitionUsageDescription PERMISSION_SPEECH_RECOGNIZER
    PermissionGroup.photos NSPhotoLibraryUsageDescription PERMISSION_PHOTOS
    PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse NSLocationUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription PERMISSION_LOCATION
    PermissionGroup.notification PermissionGroupNotification PERMISSION_NOTIFICATIONS
    PermissionGroup.mediaLibrary NSAppleMusicUsageDescription, kTCCServiceMediaLibrary PERMISSION_MEDIA_LIBRARY
    PermissionGroup.sensors NSMotionUsageDescription PERMISSION_SENSORS
    PermissionGroup.bluetooth NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription PERMISSION_BLUETOOTH
    PermissionGroup.appTrackingTransparency NSUserTrackingUsageDescription PERMISSION_APP_TRACKING_TRANSPARENCY
    PermissionGroup.criticalAlerts PermissionGroupCriticalAlerts PERMISSION_CRITICAL_ALERTS
  5. Clean & Rebuild

  6. For Record Permission:

 <key>NSMicrophoneUsageDescription</key>
 <string>We need to access to the microphone to record audio file</string>
  • min SDK: 11.0

Usage

For init path

import 'package:social_media_audio_recorder/social_media_audio_recorder.dart';
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  SocialMediaFilePath.init();

  runApp(const MyApp());
}

User RecordButton

import 'package:flutter/material.dart';
import 'package:social_media_audio_recorder/social_media_audio_recorder.dart';
import 'package:voice_message_package/voice_message_package.dart';

class _ExampleState extends State<Example> with SingleTickerProviderStateMixin {
   AnimationController? controller;

   String filepath = "";
   bool readOnly = false;
   @override
   void initState() {
      controller = AnimationController(
         vsync: this,
         duration: const Duration(milliseconds: 600),
      );

      super.initState();
   }

   @override
   Widget build(BuildContext context) {
      return Scaffold(
         backgroundColor: Colors.black,
         body: SafeArea(
            child: Column(
               mainAxisAlignment: MainAxisAlignment.center,
               crossAxisAlignment: CrossAxisAlignment.center,
               children: [
                  filepath != ""
                          ? Expanded(
                     child: Column(
                        children: [
                           VoiceMessage(
                              audioSrc: filepath,
                              me: true,
                           ),
                        ],
                     ),
                  )
                          : Expanded(child: Container()),
                  Row(
                     children: [
                        Expanded(
                           child: Padding(
                              padding: const EdgeInsets.only(left: 19),
                              child: Container(
                                 height: 55,
                                 decoration: BoxDecoration(
                                    borderRadius: BorderRadius.circular(10),
                                    color: Colors.white.withOpacity(0.2),
                                 ),
                                 child: Padding(
                                    padding: const EdgeInsets.symmetric(horizontal: 20),
                                    child: TextField(
                                       readOnly: readOnly,
                                       maxLines: null,
                                       decoration: InputDecoration(
                                          border: InputBorder.none,
                                       ),
                                    ),
                                 ),
                              ),
                           ),
                        ),
                        const SizedBox(width: 4),
                        RecordButton(
                           color: Colors.black,
                           allTextColor: Colors.white,
                           controller: controller!,
                           arrowColor: Colors.white,
                           onRecordEnd: (String value) {
                              setState(() {
                                 filepath = value;
                                 readOnly = false;
                              });
                           },
                           onRecordStart: () {
                              setState(() {
                                 readOnly = true;
                              });
                           },
                           onCancelRecord: () {
                              setState(() {
                                 readOnly = false;
                              });
                           },
                        ),
                     ],
                  ),
               ],
            ),
         ),
      );
   }
}

所屬分類

依賴

依賴清單 7 項

原始碼儲存庫

使用此套件的專案

暫無相關資料。