From 654e66c7f436a2f3252d06a01027cf042f8c3a55 Mon Sep 17 00:00:00 2001 From: timbotimbo Date: Sun, 7 May 2023 18:51:52 +0200 Subject: [PATCH] Update examples to null safety (#732) * Make ReadMe examples null-safe & fix errors. * Make example project null safe. * Fix most linter warnings. --- README.md | 62 ++++++++-------- example/lib/main.dart | 16 +++-- example/lib/menu_screen.dart | 35 +++++---- example/lib/screens/api_screen.dart | 72 ++++++++++--------- example/lib/screens/loader_screen.dart | 18 ++--- .../lib/screens/no_interaction_screen.dart | 28 ++++---- example/lib/screens/orientation_screen.dart | 20 +++--- example/lib/screens/simple_screen.dart | 30 ++++---- example/pubspec.yaml | 2 +- example/test/widget_test.dart | 2 +- 10 files changed, 157 insertions(+), 128 deletions(-) diff --git a/README.md b/README.md index b933776e..e2da8bdf 100644 --- a/README.md +++ b/README.md @@ -479,40 +479,41 @@ Unable to find a matching variant of project :unityLibrary: ```dart import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_unity_widget/flutter_unity_widget.dart'; void main() { - runApp(MaterialApp( - home: UnityDemoScreen() - )); + runApp( + const MaterialApp( + home: UnityDemoScreen(), + ), + ); } class UnityDemoScreen extends StatefulWidget { - - UnityDemoScreen({Key key}) : super(key: key); + const UnityDemoScreen({Key? key}) : super(key: key); @override - _UnityDemoScreenState createState() => _UnityDemoScreenState(); + State createState() => _UnityDemoScreenState(); } -class _UnityDemoScreenState extends State{ +class _UnityDemoScreenState extends State { static final GlobalKey _scaffoldKey = GlobalKey(); - UnityWidgetController _unityWidgetController; + UnityWidgetController? _unityWidgetController; + @override Widget build(BuildContext context) { - return Scaffold( key: _scaffoldKey, body: SafeArea( bottom: false, child: WillPopScope( - onWillPop: () { + onWillPop: () async { // Pop the category page if Android back button is pressed. + return true; }, child: Container( - color: colorYellow, + color: Colors.yellow, child: UnityWidget( onUnityCreated: onUnityCreated, ), @@ -524,9 +525,10 @@ class _UnityDemoScreenState extends State{ // Callback that connects the created controller to the unity controller void onUnityCreated(controller) { - this._unityWidgetController = controller; + _unityWidgetController = controller; } } + ```
@@ -536,17 +538,19 @@ class _UnityDemoScreenState extends State{ import 'package:flutter/material.dart'; import 'package:flutter_unity_widget/flutter_unity_widget.dart'; -void main() => runApp(MyApp()); +void main() => runApp(const MyApp()); class MyApp extends StatefulWidget { + const MyApp({Key? key}) : super(key: key); + @override - _MyAppState createState() => _MyAppState(); + State createState() => _MyAppState(); } class _MyAppState extends State { static final GlobalKey _scaffoldKey = GlobalKey(); - UnityWidgetController _unityWidgetController; + UnityWidgetController? _unityWidgetController; double _sliderValue = 0.0; @override @@ -571,10 +575,10 @@ class _MyAppState extends State { child: Stack( children: [ UnityWidget( - onUnityCreated: onUnityCreated, - onUnityMessage: onUnityMessage, - onUnitySceneLoaded: onUnitySceneLoaded, - fullscreen: false, + onUnityCreated: onUnityCreated, + onUnityMessage: onUnityMessage, + onUnitySceneLoaded: onUnitySceneLoaded, + fullscreen: false, ), Positioned( bottom: 20, @@ -584,8 +588,8 @@ class _MyAppState extends State { elevation: 10, child: Column( children: [ - Padding( - padding: const EdgeInsets.only(top: 20), + const Padding( + padding: EdgeInsets.only(top: 20), child: Text("Rotation speed:"), ), Slider( @@ -612,7 +616,7 @@ class _MyAppState extends State { // Communcation from Flutter to Unity void setRotationSpeed(String speed) { - _unityWidgetController.postMessage( + _unityWidgetController?.postMessage( 'Cube', 'SetRotationSpeed', speed, @@ -626,15 +630,17 @@ class _MyAppState extends State { // Callback that connects the created controller to the unity controller void onUnityCreated(controller) { - this._unityWidgetController = controller; + _unityWidgetController = controller; } // Communication from Unity when new scene is loaded to Flutter - void onUnitySceneLoaded(SceneLoaded sceneInfo) { - print('Received scene loaded from unity: ${sceneInfo.name}'); - print('Received scene loaded from unity buildIndex: ${sceneInfo.buildIndex}'); + void onUnitySceneLoaded(SceneLoaded? sceneInfo) { + if (sceneInfo != null) { + print('Received scene loaded from unity: ${sceneInfo.name}'); + print( + 'Received scene loaded from unity buildIndex: ${sceneInfo.buildIndex}'); + } } - } ``` diff --git a/example/lib/main.dart b/example/lib/main.dart index 54be0110..19a8f82b 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -8,10 +8,12 @@ import 'screens/loader_screen.dart'; import 'screens/simple_screen.dart'; void main() { - runApp(MyApp()); + runApp(const MyApp()); } class MyApp extends StatelessWidget { + const MyApp({Key? key}) : super(key: key); + // This widget is the root of your application. @override Widget build(BuildContext context) { @@ -23,12 +25,12 @@ class MyApp extends StatelessWidget { ), initialRoute: '/', routes: { - '/': (context) => MenuScreen(), - '/simple': (context) => SimpleScreen(), - '/loader': (context) => LoaderScreen(), - '/orientation': (context) => OrientationScreen(), - '/api': (context) => ApiScreen(), - '/none': (context) => NoInteractionScreen(), + '/': (context) => const MenuScreen(), + '/simple': (context) => const SimpleScreen(), + '/loader': (context) => const LoaderScreen(), + '/orientation': (context) => const OrientationScreen(), + '/api': (context) => const ApiScreen(), + '/none': (context) => const NoInteractionScreen(), }, ); } diff --git a/example/lib/menu_screen.dart b/example/lib/menu_screen.dart index ba16bb3e..3c553d9d 100644 --- a/example/lib/menu_screen.dart +++ b/example/lib/menu_screen.dart @@ -1,48 +1,48 @@ import 'package:flutter/material.dart'; class MenuScreen extends StatefulWidget { - MenuScreen({Key key}) : super(key: key); + const MenuScreen({Key? key}) : super(key: key); @override - _MenuScreenState createState() => _MenuScreenState(); + State createState() => _MenuScreenState(); } class _MenuScreenState extends State { bool enableAR = true; List<_MenuListItem> menus = [ - new _MenuListItem( + _MenuListItem( description: 'Simple demonstration of unity flutter library', route: '/simple', title: 'Simple Unity Demo', enableAR: false, ), - new _MenuListItem( + _MenuListItem( description: 'No interaction of unity flutter library', route: '/none', title: 'No Interaction Unity Demo', enableAR: false, ), - new _MenuListItem( + _MenuListItem( description: 'Unity load and unload unity demo', route: '/loader', title: 'Safe mode Demo', enableAR: false, ), - new _MenuListItem( + _MenuListItem( description: 'This example shows various native API exposed by the library', route: '/api', title: 'Native exposed API demo', enableAR: false, ), - new _MenuListItem( + _MenuListItem( title: 'Test Orientation', route: '/orientation', description: 'test orientation change', enableAR: false, ), - new _MenuListItem( + _MenuListItem( description: 'Unity native activity demo', route: '/activity', title: 'Native Activity Demo ', @@ -54,17 +54,19 @@ class _MenuScreenState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('Menu List'), + title: const Text('Menu List'), actions: [ Row( children: [ - Text("Enable AR"), + const Text("Enable AR"), Checkbox( value: enableAR, onChanged: (changed) { - setState(() { - enableAR = changed; - }); + if (changed != null) { + setState(() { + enableAR = changed; + }); + } }, ), ], @@ -97,5 +99,10 @@ class _MenuListItem { final String route; final bool enableAR; - _MenuListItem({this.title, this.description, this.route, this.enableAR}); + _MenuListItem({ + required this.title, + required this.description, + required this.route, + required this.enableAR, + }); } diff --git a/example/lib/screens/api_screen.dart b/example/lib/screens/api_screen.dart index 57541d5a..02104b0c 100644 --- a/example/lib/screens/api_screen.dart +++ b/example/lib/screens/api_screen.dart @@ -1,16 +1,18 @@ +// ignore_for_file: avoid_print + import 'package:flutter/material.dart'; import 'package:flutter_unity_widget/flutter_unity_widget.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; class ApiScreen extends StatefulWidget { - ApiScreen({Key key}) : super(key: key); + const ApiScreen({Key? key}) : super(key: key); @override - _ApiScreenState createState() => _ApiScreenState(); + State createState() => _ApiScreenState(); } class _ApiScreenState extends State { - UnityWidgetController _unityWidgetController; + UnityWidgetController? _unityWidgetController; double _sliderValue = 0.0; @override @@ -20,7 +22,7 @@ class _ApiScreenState extends State { @override void dispose() { - _unityWidgetController.dispose(); + _unityWidgetController?.dispose(); super.dispose(); } @@ -28,7 +30,7 @@ class _ApiScreenState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('API Screen'), + title: const Text('API Screen'), ), body: Card( margin: const EdgeInsets.all(8), @@ -38,14 +40,12 @@ class _ApiScreenState extends State { ), child: Stack( children: [ - Container( - child: UnityWidget( - onUnityCreated: onUnityCreated, - onUnityMessage: onUnityMessage, - onUnitySceneLoaded: onUnitySceneLoaded, - fullscreen: false, - useAndroidViewSurface: false, - ), + UnityWidget( + onUnityCreated: onUnityCreated, + onUnityMessage: onUnityMessage, + onUnitySceneLoaded: onUnitySceneLoaded, + fullscreen: false, + useAndroidViewSurface: false, ), PointerInterceptor( child: Positioned( @@ -57,8 +57,8 @@ class _ApiScreenState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Padding( - padding: const EdgeInsets.only(top: 20), + const Padding( + padding: EdgeInsets.only(top: 20), child: Text("Rotation speed:"), ), Slider( @@ -78,27 +78,27 @@ class _ApiScreenState extends State { children: [ MaterialButton( onPressed: () { - _unityWidgetController.quit(); + _unityWidgetController?.quit(); }, - child: Text("Quit"), + child: const Text("Quit"), ), MaterialButton( onPressed: () { - _unityWidgetController.create(); + _unityWidgetController?.create(); }, - child: Text("Create"), + child: const Text("Create"), ), MaterialButton( onPressed: () { - _unityWidgetController.pause(); + _unityWidgetController?.pause(); }, - child: Text("Pause"), + child: const Text("Pause"), ), MaterialButton( onPressed: () { - _unityWidgetController.resume(); + _unityWidgetController?.resume(); }, - child: Text("Resume"), + child: const Text("Resume"), ), ], ), @@ -110,21 +110,21 @@ class _ApiScreenState extends State { MaterialButton( onPressed: () async { await _unityWidgetController - .openInNativeProcess(); + ?.openInNativeProcess(); }, - child: Text("Open Native"), + child: const Text("Open Native"), ), MaterialButton( onPressed: () { - _unityWidgetController.unload(); + _unityWidgetController?.unload(); }, - child: Text("Unload"), + child: const Text("Unload"), ), MaterialButton( onPressed: () { - _unityWidgetController.quit(); + _unityWidgetController?.quit(); }, - child: Text("Silent Quit"), + child: const Text("Silent Quit"), ), ], ), @@ -141,7 +141,7 @@ class _ApiScreenState extends State { } void setRotationSpeed(String speed) { - _unityWidgetController.postMessage( + _unityWidgetController?.postMessage( 'Cube', 'SetRotationSpeed', speed, @@ -152,13 +152,17 @@ class _ApiScreenState extends State { print('Received message from unity: ${message.toString()}'); } - void onUnitySceneLoaded(SceneLoaded scene) { - print('Received scene loaded from unity: ${scene.name}'); - print('Received scene loaded from unity buildIndex: ${scene.buildIndex}'); + void onUnitySceneLoaded(SceneLoaded? scene) { + if (scene != null) { + print('Received scene loaded from unity: ${scene.name}'); + print('Received scene loaded from unity buildIndex: ${scene.buildIndex}'); + } else { + print('Received scene loaded from unity: null'); + } } // Callback that connects the created controller to the unity controller void onUnityCreated(controller) { - this._unityWidgetController = controller; + _unityWidgetController = controller; } } diff --git a/example/lib/screens/loader_screen.dart b/example/lib/screens/loader_screen.dart index 98746813..b81c8903 100644 --- a/example/lib/screens/loader_screen.dart +++ b/example/lib/screens/loader_screen.dart @@ -1,16 +1,18 @@ +// ignore_for_file: avoid_print + import 'package:flutter/material.dart'; import 'package:flutter_unity_widget/flutter_unity_widget.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; class LoaderScreen extends StatefulWidget { - LoaderScreen({Key key}) : super(key: key); + const LoaderScreen({Key? key}) : super(key: key); @override - _LoaderScreenState createState() => _LoaderScreenState(); + State createState() => _LoaderScreenState(); } class _LoaderScreenState extends State { - UnityWidgetController _unityWidgetController; + UnityWidgetController? _unityWidgetController; double _sliderValue = 0.0; @override @@ -22,7 +24,7 @@ class _LoaderScreenState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('Safe Mode Screen'), + title: const Text('Safe Mode Screen'), ), body: Card( margin: const EdgeInsets.all(8), @@ -46,8 +48,8 @@ class _LoaderScreenState extends State { elevation: 10, child: Column( children: [ - Padding( - padding: const EdgeInsets.only(top: 20), + const Padding( + padding: EdgeInsets.only(top: 20), child: Text("Rotation speed:"), ), Slider( @@ -73,7 +75,7 @@ class _LoaderScreenState extends State { } void setRotationSpeed(String speed) { - _unityWidgetController.postMessage( + _unityWidgetController?.postMessage( 'Cube', 'SetRotationSpeed', speed, @@ -86,6 +88,6 @@ class _LoaderScreenState extends State { // Callback that connects the created controller to the unity controller void onUnityCreated(controller) { - this._unityWidgetController = controller; + _unityWidgetController = controller; } } diff --git a/example/lib/screens/no_interaction_screen.dart b/example/lib/screens/no_interaction_screen.dart index eb1a8fbf..6fd17735 100644 --- a/example/lib/screens/no_interaction_screen.dart +++ b/example/lib/screens/no_interaction_screen.dart @@ -3,17 +3,17 @@ import 'package:flutter_unity_widget/flutter_unity_widget.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; class NoInteractionScreen extends StatefulWidget { - NoInteractionScreen({Key key}) : super(key: key); + const NoInteractionScreen({Key? key}) : super(key: key); @override - _NoInteractionScreenState createState() => _NoInteractionScreenState(); + State createState() => _NoInteractionScreenState(); } class _NoInteractionScreenState extends State { static final GlobalKey _scaffoldKey = GlobalKey(); - UnityWidgetController _unityWidgetController; + UnityWidgetController? _unityWidgetController; @override void initState() { @@ -22,7 +22,7 @@ class _NoInteractionScreenState extends State { @override void dispose() { - _unityWidgetController.dispose(); + _unityWidgetController?.dispose(); super.dispose(); } @@ -31,7 +31,7 @@ class _NoInteractionScreenState extends State { return Scaffold( key: _scaffoldKey, appBar: AppBar( - title: Text('No Interaction Screen'), + title: const Text('No Interaction Screen'), ), body: Card( margin: const EdgeInsets.all(8), @@ -46,7 +46,7 @@ class _NoInteractionScreenState extends State { onUnityMessage: onUnityMessage, onUnitySceneLoaded: onUnitySceneLoaded, useAndroidViewSurface: true, - borderRadius: BorderRadius.all(Radius.circular(70)), + borderRadius: const BorderRadius.all(Radius.circular(70)), ), PointerInterceptor( child: Positioned( @@ -57,7 +57,7 @@ class _NoInteractionScreenState extends State { onPressed: () { Navigator.of(context).pushNamed('/simple'); }, - child: Text('Switch Flutter Screen'), + child: const Text('Switch Flutter Screen'), ), ), ), @@ -68,7 +68,7 @@ class _NoInteractionScreenState extends State { } void setRotationSpeed(String speed) { - _unityWidgetController.postMessage( + _unityWidgetController?.postMessage( 'Cube', 'SetRotationSpeed', speed, @@ -79,14 +79,18 @@ class _NoInteractionScreenState extends State { print('Received message from unity: ${message.toString()}'); } - void onUnitySceneLoaded(SceneLoaded scene) { - print('Received scene loaded from unity: ${scene.name}'); - print('Received scene loaded from unity buildIndex: ${scene.buildIndex}'); + void onUnitySceneLoaded(SceneLoaded? scene) { + if (scene != null) { + print('Received scene loaded from unity: ${scene.name}'); + print('Received scene loaded from unity buildIndex: ${scene.buildIndex}'); + } else { + print('Received scene loaded from unity: null'); + } } // Callback that connects the created controller to the unity controller void _onUnityCreated(controller) { controller.resume(); - this._unityWidgetController = controller; + _unityWidgetController = controller; } } diff --git a/example/lib/screens/orientation_screen.dart b/example/lib/screens/orientation_screen.dart index d08a1b49..e4e808ba 100644 --- a/example/lib/screens/orientation_screen.dart +++ b/example/lib/screens/orientation_screen.dart @@ -4,14 +4,14 @@ import 'package:flutter_unity_widget/flutter_unity_widget.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; class OrientationScreen extends StatefulWidget { - OrientationScreen({Key key}) : super(key: key); + const OrientationScreen({Key? key}) : super(key: key); @override - _LoaderScreenState createState() => _LoaderScreenState(); + State createState() => _OrientationScreenState(); } -class _LoaderScreenState extends State { - UnityWidgetController _unityWidgetController; +class _OrientationScreenState extends State { + UnityWidgetController? _unityWidgetController; double _sliderValue = 0.0; @override @@ -23,7 +23,7 @@ class _LoaderScreenState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('Orientation Screen'), + title: const Text('Orientation Screen'), ), body: Card( margin: const EdgeInsets.all(8), @@ -61,10 +61,10 @@ class _LoaderScreenState extends State { [DeviceOrientation.portraitUp]); } }, - child: Text("Change Orientation"), + child: const Text("Change Orientation"), ), - Padding( - padding: const EdgeInsets.only(top: 20), + const Padding( + padding: EdgeInsets.only(top: 20), child: Text("Rotation speed:"), ), Slider( @@ -90,7 +90,7 @@ class _LoaderScreenState extends State { } void setRotationSpeed(String speed) { - _unityWidgetController.postMessage( + _unityWidgetController?.postMessage( 'Cube', 'SetRotationSpeed', speed, @@ -103,6 +103,6 @@ class _LoaderScreenState extends State { // Callback that connects the created controller to the unity controller void onUnityCreated(controller) { - this._unityWidgetController = controller; + _unityWidgetController = controller; } } diff --git a/example/lib/screens/simple_screen.dart b/example/lib/screens/simple_screen.dart index 20ec44d6..feb6dd05 100644 --- a/example/lib/screens/simple_screen.dart +++ b/example/lib/screens/simple_screen.dart @@ -3,17 +3,17 @@ import 'package:flutter_unity_widget/flutter_unity_widget.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; class SimpleScreen extends StatefulWidget { - SimpleScreen({Key key}) : super(key: key); + const SimpleScreen({Key? key}) : super(key: key); @override - _SimpleScreenState createState() => _SimpleScreenState(); + State createState() => _SimpleScreenState(); } class _SimpleScreenState extends State { static final GlobalKey _scaffoldKey = GlobalKey(); - UnityWidgetController _unityWidgetController; + UnityWidgetController? _unityWidgetController; double _sliderValue = 0.0; @override @@ -23,7 +23,7 @@ class _SimpleScreenState extends State { @override void dispose() { - _unityWidgetController.dispose(); + _unityWidgetController?.dispose(); super.dispose(); } @@ -32,7 +32,7 @@ class _SimpleScreenState extends State { return Scaffold( key: _scaffoldKey, appBar: AppBar( - title: Text('Simple Screen'), + title: const Text('Simple Screen'), ), body: Card( margin: const EdgeInsets.all(0), @@ -47,7 +47,7 @@ class _SimpleScreenState extends State { onUnityMessage: onUnityMessage, onUnitySceneLoaded: onUnitySceneLoaded, useAndroidViewSurface: false, - borderRadius: BorderRadius.all(Radius.circular(70)), + borderRadius: const BorderRadius.all(Radius.circular(70)), ), PointerInterceptor( child: Positioned( @@ -58,8 +58,8 @@ class _SimpleScreenState extends State { elevation: 10, child: Column( children: [ - Padding( - padding: const EdgeInsets.only(top: 20), + const Padding( + padding: EdgeInsets.only(top: 20), child: Text("Rotation speed:"), ), Slider( @@ -84,7 +84,7 @@ class _SimpleScreenState extends State { } void setRotationSpeed(String speed) { - _unityWidgetController.postMessage( + _unityWidgetController?.postMessage( 'Cube', 'SetRotationSpeed', speed, @@ -95,14 +95,18 @@ class _SimpleScreenState extends State { print('Received message from unity: ${message.toString()}'); } - void onUnitySceneLoaded(SceneLoaded scene) { - print('Received scene loaded from unity: ${scene.name}'); - print('Received scene loaded from unity buildIndex: ${scene.buildIndex}'); + void onUnitySceneLoaded(SceneLoaded? scene) { + if (scene != null) { + print('Received scene loaded from unity: ${scene.name}'); + print('Received scene loaded from unity buildIndex: ${scene.buildIndex}'); + } else { + print('Received scene loaded from unity: null'); + } } // Callback that connects the created controller to the unity controller void _onUnityCreated(controller) { controller.resume(); - this._unityWidgetController = controller; + _unityWidgetController = controller; } } diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 3419b0e5..fb9991c8 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -6,7 +6,7 @@ description: Demonstrates how to use the flutter_unity_widget plugin. publish_to: "none" # Remove this line if you wish to publish to pub.dev environment: - sdk: ">=2.7.0 <3.0.0" + sdk: ">=2.12.0 <3.0.0" dependencies: cupertino_icons: ^1.0.0 diff --git a/example/test/widget_test.dart b/example/test/widget_test.dart index b070f7aa..96b8ee3f 100644 --- a/example/test/widget_test.dart +++ b/example/test/widget_test.dart @@ -19,7 +19,7 @@ void main() { expect( find.byWidgetPredicate( (Widget widget) => - widget is Text && widget.data.startsWith('Running on:'), + widget is Text && (widget.data?.startsWith('Running on:') ?? false), ), findsOneWidget, );