diff --git a/.github/workflows/flutter-codestyle.yml b/.github/workflows/flutter-codestyle.yml index e1da438c50..b255fd9aac 100644 --- a/.github/workflows/flutter-codestyle.yml +++ b/.github/workflows/flutter-codestyle.yml @@ -20,10 +20,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Install Flutter 2.8.1 + - name: Install Flutter 3.22.2 uses: subosito/flutter-action@v2 with: - flutter-version: 2.8.1 + flutter-version: 3.22.2 - name: Run Binding Analyzer run: flutter analyze --no-fatal-infos --no-fatal-warnings diff --git a/.github/workflows/flutter-demos.yml b/.github/workflows/flutter-demos.yml index a2357d6a38..abaff5b081 100644 --- a/.github/workflows/flutter-demos.yml +++ b/.github/workflows/flutter-demos.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - flutter-version: ['2.8.1', '3.0.4'] + flutter-version: ['3.3.0', '3.22.2'] steps: - uses: actions/checkout@v3 @@ -52,10 +52,10 @@ jobs: build-ios: name: Build iOS demo - runs-on: macos-11 + runs-on: macos-12 strategy: matrix: - flutter-version: ['2.8.1', '3.0.4'] + flutter-version: ['3.3.0', '3.22.2'] steps: - uses: actions/checkout@v3 diff --git a/demo/flutter/integration_test/app_test.dart b/demo/flutter/integration_test/app_test.dart index c01b234787..36296daf14 100644 --- a/demo/flutter/integration_test/app_test.dart +++ b/demo/flutter/integration_test/app_test.dart @@ -43,9 +43,9 @@ void main() { String keyword = testData['tests']['singleKeyword'][t]['wakeword']; String keywordPath = - "assets/test_resources/keyword_files/${keyword}_${platform}.ppn"; + "assets/test_resources/keyword_files/${keyword}_$platform.ppn"; String modelPath = - "assets/test_resources/model_files/porcupine_params${language != "en" ? "_${language}" : ""}.pv"; + "assets/test_resources/model_files/porcupine_params${language != "en" ? "_$language" : ""}.pv"; Porcupine porcupine; try { @@ -53,7 +53,7 @@ void main() { modelPath: modelPath); } on PorcupineException catch (ex) { expect(ex, equals(null), - reason: "Failed to initialize Porcupine for ${language}: ${ex}"); + reason: "Failed to initialize Porcupine for $language: $ex"); return; } @@ -74,10 +74,10 @@ void main() { porcupine.delete(); expect(detections.length, equals(1), reason: - "Number of detections for ${language} ${keyword} was incorrect"); + "Number of detections for $language $keyword was incorrect"); expect(detections[0], equals(0), reason: - "Porcupine returned wrong keyword index for ${language} ${keyword}"); + "Porcupine returned wrong keyword index for $language $keyword"); } }); @@ -90,10 +90,10 @@ void main() { testData['tests']['multipleKeyword'][t]['groundTruth']); List keywordPaths = keywords.map((keyword) { - return "assets/test_resources/keyword_files/${keyword}_${platform}.ppn"; + return "assets/test_resources/keyword_files/${keyword}_$platform.ppn"; }).toList(); String modelPath = - "assets/test_resources/model_files/porcupine_params${language != "en" ? "_${language}" : ""}.pv"; + "assets/test_resources/model_files/porcupine_params${language != "en" ? "_$language" : ""}.pv"; Porcupine porcupine; try { @@ -101,12 +101,12 @@ void main() { modelPath: modelPath); } on PorcupineException catch (ex) { expect(ex, equals(null), - reason: "Failed to initialize Porcupine for ${language}: ${ex}"); + reason: "Failed to initialize Porcupine for $language: $ex"); return; } String audioPath = - "assets/test_resources/audio_samples/multiple_keywords${language != "en" ? "_${language}" : ""}.wav"; + "assets/test_resources/audio_samples/multiple_keywords${language != "en" ? "_$language" : ""}.wav"; List pcm = await loadAudioFile(audioPath); List detections = []; @@ -121,9 +121,9 @@ void main() { porcupine.delete(); expect(detections.length, equals(groundTruth.length), - reason: "Number of detections for ${language} was incorrect"); + reason: "Number of detections for $language was incorrect"); expect(detections, equals(groundTruth), - reason: "Porcupine detections don't match truth for ${language}"); + reason: "Porcupine detections don't match truth for $language"); } }); }); diff --git a/demo/flutter/lib/main.dart b/demo/flutter/lib/main.dart index 710a61d07d..5ac8e1b27e 100644 --- a/demo/flutter/lib/main.dart +++ b/demo/flutter/lib/main.dart @@ -14,7 +14,7 @@ import 'package:flutter/material.dart'; import 'dart:async'; import 'dart:convert'; -import 'package:flutter_picker/flutter_picker.dart'; +import 'package:bottom_picker/bottom_picker.dart'; import 'package:porcupine_flutter/porcupine.dart'; import 'package:porcupine_flutter/porcupine_manager.dart'; import 'package:porcupine_flutter/porcupine_error.dart'; @@ -56,7 +56,7 @@ class _MyAppState extends State with WidgetsBindingObserver { isButtonDisabled = true; backgroundColour = defaultColour; }); - WidgetsBinding.instance?.addObserver(this); + WidgetsBinding.instance.addObserver(this); _initializeKeywordMap(); _loadParams(); @@ -64,7 +64,7 @@ class _MyAppState extends State with WidgetsBindingObserver { @override void dispose() { - WidgetsBinding.instance?.removeObserver(this); + WidgetsBinding.instance.removeObserver(this); super.dispose(); } @@ -278,7 +278,7 @@ class _MyAppState extends State with WidgetsBindingObserver { buildStartButton(BuildContext context) { final ButtonStyle buttonStyle = ElevatedButton.styleFrom( - primary: picoBlue, + backgroundColor: picoBlue, shape: CircleBorder(), textStyle: TextStyle(color: Colors.white)); @@ -327,14 +327,23 @@ class _MyAppState extends State with WidgetsBindingObserver { ))); showPicker(BuildContext context) { - Picker picker = Picker( - adapter: PickerDataAdapter(pickerData: _keywords.toList()), - changeToFirst: true, - textAlign: TextAlign.left, - columnPadding: const EdgeInsets.all(8.0), - onConfirm: (Picker picker, List value) { - loadNewKeyword(picker.getSelectedValues()[0]); - }); - picker.show(_scaffoldKey.currentState!); + BottomPicker picker = BottomPicker( + pickerTitle: Text( + "Choose a keyword", + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 15)), + titleAlignment: Alignment.topCenter, + gradientColors: [ + picoBlue, picoBlue + ], + items: _keywords.toList().map((x) => Center( + child: Text(x) + )).toList(), + onSubmit: (index) { + loadNewKeyword(_keywords[index]); + }, + ); + picker.show(_scaffoldKey.currentContext!); } } diff --git a/demo/flutter/pubspec.yaml b/demo/flutter/pubspec.yaml index 841b459805..569c67d920 100644 --- a/demo/flutter/pubspec.yaml +++ b/demo/flutter/pubspec.yaml @@ -6,14 +6,14 @@ publish_to: 'none' version: 1.0.0 environment: - sdk: ">=2.15.0 <4.0.0" - flutter: ">=2.8.1" + sdk: ">=2.18.0 <4.0.0" + flutter: ">=3.3.0" dependencies: flutter: sdk: flutter - flutter_picker: ^2.0.1 + bottom_picker: ^2.7.0 porcupine_flutter: ^3.0.3 path: ^1.8.0 diff --git a/demo/flutter/scripts/prepare_demo.dart b/demo/flutter/scripts/prepare_demo.dart index 87da10fe72..79f7f6937e 100644 --- a/demo/flutter/scripts/prepare_demo.dart +++ b/demo/flutter/scripts/prepare_demo.dart @@ -62,7 +62,7 @@ void main(List arguments) async { } modelDir.createSync(recursive: true); - var params = Map(); + var params = {}; params["language"] = language; params["keywords"] = [];