I'm trying to build a web app on Flutter. I was trying to add in some code for some buttons I found online but I'm getting this error and I have no idea why. The code seems to have no errors in itself, but when I run the program I get this error.
NoSuchMethodError: '<Unexpected Null Value>' method not found
The program is basically looks like an app bar: it shows a bunch of rectangular buttons that include Settings, Log out, etc. Before this, I successfully built the backdrop and a rectangle for the buttons to go placed. The buttons themselves are causing this error.
Any help would be much appreciated!
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(
'\t\tHome 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: "$category\n",
style: TextStyle(
fontSize: getProportionateScreenWidth(18),
fontWeight: FontWeight.bold,
),
),
TextSpan(text: "$numOfBrands Brands")
],
),
),
),
],
),
),
),
),
);
}
}