#flutter #dart #flutter-web
#flutter #dart #flutter-web
Вопрос:
Я пытаюсь создать веб-приложение на Flutter. Я пытался добавить некоторый код для некоторых кнопок, которые я нашел в Интернете, но я получаю эту ошибку, и я понятия не имею, почему. Кажется, что в коде нет ошибок, но когда я запускаю программу, я получаю эту ошибку.
NoSuchMethodError: '<Unexpected Null Value>' method not found
Программа в основном выглядит как панель приложений: она показывает кучу прямоугольных кнопок, которые включают настройки, выход из системы и т.д. Перед этим я успешно построил фон и прямоугольник для размещения кнопок. Сами кнопки вызывают эту ошибку.
Любая помощь была бы очень признательна!
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import '../time/time_view.dart';
import 'package:provider/provider.dart';
import '../../../app/constants/strings.dart';
import '../../../app/services/firebase_auth_service.dart';
import 'package:flutter_web_firebase_googe_auth/size_config.dart';
String name = '';
final FirebaseAuth _auth = FirebaseAuth.instance;
getCurrentUserName() async {
final user = await _auth.currentUser();
if (user.isAnonymous) {
name = 'Guest';
} else {
name = user.displayName;
}
}
class HomeView extends StatelessWidget {
const HomeView({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
// variable size
Size size = MediaQuery.of(context).size;
getCurrentUserName();
return Scaffold(
backgroundColor: Colors.blue[200],
body: Center(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(16),
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30.0)),
elevation: 5.0,
child: Container(
width: size.width,
height: size.height * .9,
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(20),
child: Text(
'ttHome Page n Welcome',
style: Theme.of(context).textTheme.headline4,
),
),
const Spacer(),
SpecialOffers(),
RaisedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TimeView()),
);
},
child: const Text(Strings.time),
),
const Spacer(),
RaisedButton(
onPressed: () {
context.read<FirebaseAuthService>().signOut();
},
child: const Text(Strings.signOut),
),
const Spacer(),
],
),
),
),
),
],
),
),
);
}
}
class SectionTitle extends StatelessWidget {
const SectionTitle({
Key key,
@required this.title,
@required this.press,
}) : super(key: key);
final String title;
final GestureTapCallback press;
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
title,
style: TextStyle(
fontSize: getProportionateScreenWidth(18),
color: Colors.black,
),
),
GestureDetector(
onTap: press,
child: Text(
"See More",
style: TextStyle(color: Color(0xFFBBBBBB)),
),
),
],
);
}
}
class SpecialOffers extends StatelessWidget {
const SpecialOffers({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(20)),
child: SectionTitle(
title: "Special for you",
press: () {},
),
),
SizedBox(height: getProportionateScreenWidth(20)),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: [
SpecialOfferCard(
image: "assets/images/Image Banner 2.png",
category: "Smartphone",
numOfBrands: 18,
press: () {},
),
SpecialOfferCard(
image: "assets/images/Image Banner 3.png",
category: "Fashion",
numOfBrands: 24,
press: () {},
),
SizedBox(width: getProportionateScreenWidth(20)),
],
),
),
],
);
}
}
class SpecialOfferCard extends StatelessWidget {
const SpecialOfferCard({
Key key,
@required this.category,
@required this.image,
@required this.numOfBrands,
@required this.press,
}) : super(key: key);
final String category, image;
final int numOfBrands;
final GestureTapCallback press;
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(left: getProportionateScreenWidth(20)),
child: GestureDetector(
onTap: press,
child: SizedBox(
width: getProportionateScreenWidth(242),
height: getProportionateScreenWidth(100),
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: Stack(
children: [
Image.asset(
image,
fit: BoxFit.cover,
),
Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Color(0xFF343434).withOpacity(0.4),
Color(0xFF343434).withOpacity(0.15),
],
),
),
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: getProportionateScreenWidth(15.0),
vertical: getProportionateScreenWidth(10),
),
child: Text.rich(
TextSpan(
style: TextStyle(color: Colors.white),
children: [
TextSpan(
text: "$categoryn",
style: TextStyle(
fontSize: getProportionateScreenWidth(18),
fontWeight: FontWeight.bold,
),
),
TextSpan(text: "$numOfBrands Brands")
],
),
),
),
],
),
),
),
),
);
}
}
Комментарии:
1. Я получил эту ошибку при запуске
myVariable
, когда она была нулевой :int myVariable;
. Может быть, вы можете найти что-то подобное в своем коде…2. Вы уверены, что эта строка
final user = await _auth.currentUser();
не возвращаетсяnull
? Еслиnull
возвращается, то эта строкаif (user.isAnonymous)
вызовет исключение.
Ответ №1:
NoSuchMethodError
обычно следует указывать, какая строка вызывает проблему. Это должно быть найдено где-то в полном наборе журналов.
Из кода одной из вероятных причин этой ошибки является FirebaseAuth _auth
. Вы также можете проверить, не является ли FirebaseAuth нулевым для вашего провайдера context.read<FirebaseAuthService>().signOut();
.