M N*_*man 7 android dart google-signin flutter
我正在编写一个关于 flutter 的代码,以便在 android/ios 和 web 上使用 Google 登录,但我第一时间就遇到了这个错误。我在 Android 模拟器上运行它来检查它是否正常工作,我现在还没有将其设置为网络。在模拟器上运行后,我收到\n以下错误:
\n======== Exception caught by widgets library =======================================================\nThe following _TypeError was thrown building Obx(has builder, dirty, state: _ObxState#c1649):\ntype 'Null' is not a subtype of type 'Widget'\n\nThe relevant error-causing widget was: \n Obx Obx:file:///D:/Noum/Data/Uni%20Data/Codes/Android%20Studio/Flutter/web_ios_android_google_signin/lib/LoginPage.dart:13:15\nWhen the exception was thrown, this was the stack: \n#0 LoginPage.build.<anonymous closure> (package:web_ios_android_google_signin/LoginPage.dart:16:19)\n#1 Obx.build (package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart:70:28)\n#2 RxInterface.notifyChildren (package:get/get_rx/src/rx_types/rx_core/rx_interface.dart:26:27)\n#3 _ObxState.build (package:get/get_state_manager/src/rx_flutter/rx_obx_widget.dart:54:19)\n#4 StatefulElement.build (package:flutter/src/widgets/framework.dart:4782:27)\n#5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4665:15)\n#6 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4840:11)\n#7 Element.rebuild (package:flutter/src/widgets/framework.dart:4355:5)\n#8 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4643:5)\n#9 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4831:11)\n#184 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1143:15)\n#185 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1080:9)\n#186 SchedulerBinding.scheduleWarmUpFrame.<anonymous closure> (package:flutter/src/scheduler/binding.dart:863:7)\n(elided 4 frames from class _RawReceivePortImpl, class _Timer, and dart:async-patch)\n====================================================================================================\nRun Code Online (Sandbox Code Playgroud)\n颤振医生
\nD:\\Noum\\Data\\Uni Data\\Codes\\Android Studio\\Flutter\\web_ios_android_google_signin\\android>flutter doctor\nDoctor summary (to see all details, run flutter doctor -v):\n[\xe2\x88\x9a] Flutter (Channel beta, 2.4.0-4.2.pre, on Microsoft Windows [Version 10.0.19043.1149], locale en-PK)\n[\xe2\x88\x9a] Android toolchain - develop for Android devices (Android SDK version 30.0.3)\n[\xe2\x88\x9a] Chrome - develop for the web\n[\xe2\x88\x9a] Android Studio (version 4.2.0)\n[\xe2\x88\x9a] Connected device (3 available)\n\n\xe2\x80\xa2 No issues found!\nRun Code Online (Sandbox Code Playgroud)\n主dart
\nimport 'package:flutter/material.dart';\nimport 'package:get/get_navigation/src/root/get_material_app.dart';\nimport 'package:web_ios_android_google_signin/LoginPage.dart';\n\nvoid main() {\n runApp(const MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n const MyApp({Key? key}) : super(key: key);\n\n // This widget is the root of your application.\n @override\n Widget build(BuildContext context) {\n return GetMaterialApp(\n title: 'Flutter Demo',\n theme: ThemeData(\n primarySwatch: Colors.blue,\n ),\n home: LoginPage(),\n );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n登录控制器.dart
\nimport 'package:get/get_rx/src/rx_types/rx_types.dart';\nimport 'package:get/get_state_manager/src/simple/get_controllers.dart';\nimport 'package:google_sign_in/google_sign_in.dart';\n\nclass LoginController extends GetxController{\n var _googleSignin=GoogleSignIn();\n var googleAccount=Rx<GoogleSignInAccount?>(null);\n\nlogin() async{\n googleAccount = (await _googleSignin.signIn()) as Rx<GoogleSignInAccount?>;\n}\n\n logOut() async{\n googleAccount = (await _googleSignin.signOut()) as Rx<GoogleSignInAccount?>;\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n登录页面
\nimport 'package:flutter/material.dart';\nimport 'package:get/get.dart';\nimport 'package:web_ios_android_google_signin/Login_Controller.dart';\n\nclass LoginPage extends StatelessWidget {\n //const LoginPage({Key? key}) : super(key: key);\nfinal controller=Get.put(LoginController());\n @override\n Widget build(BuildContext context) {\n return Scaffold(\n appBar: AppBar(title: Text('Login Page')),\n body: Center(\n child: Obx((){\n if(controller.googleAccount.value==null)\n\n return buildLoginButton();\n\n else\n\n return buildProfileView();\n\n }\n ),\n )\n );\n }\n\n buildProfileView(){\n Column(\n mainAxisSize: MainAxisSize.min,\n children: [\n CircleAvatar(\n backgroundImage: Image.network(controller.googleAccount.value?.photoUrl ?? '').image,\n radius: 100,\n ),\n Text(\n controller.googleAccount.value?.displayName ?? '',\n style: Get.textTheme.headline3,\n ),\n Text(\n controller.googleAccount.value?.email ?? '',\n style: Get.textTheme.bodyText1,\n ),\n SizedBox(height: 16),\n ActionChip(\n avatar: Icon(Icons.logout),\n label: Text('Logout'),\n onPressed: (){\n controller.logOut();\n },\n )\n ],\n );\n }\n\n\n\n\n buildLoginButton(){\n FloatingActionButton.extended(\n onPressed: (){\n controller.login();\n },\n icon: Image.asset(\n 'images/googlepnglogo',\n height: 32,\n width: 32,\n ),\n label: Text('SignIn With Google'),\n backgroundColor: Colors.white,\n foregroundColor: Colors.black54,\n );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
小智 4
您忘记在以下方法中添加 return
buildProfileView(){
return Column();
}
buildLoginButton(){
return FloatingActionButton.extended()
}
Run Code Online (Sandbox Code Playgroud)