Home > database >  Undefined string name. How can I solve this error without getting other one's
Undefined string name. How can I solve this error without getting other one's

Time:10-30

How to fix this error:

Undefined string name

In line 64 I have defined the string name but in line 117 the string name is undefined and if I try to make it defined there come's an other error in line 60: The body might complete normally, causing 'null' to be returned, but the return type, 'Widget', is a potentially non-nullable type and if I fix this I get an black screen.

So in short can anyone help me with this error without getting other errors.

import 'dart:async';
import 'dart:io';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:flutter_svg/svg.dart';
import 'package:hetmaantje/arbo.dart';
import 'package:hetmaantje/inschrijven.dart';
import 'package:hetmaantje/quiz_screen.dart';
import 'package:hetmaantje/utils1/colors.dart';
import 'package:hetmaantje/todolist.dart';
import 'package:page_transition/page_transition.dart';
import 'package:path_provider/path_provider.dart';
import 'contactpage.dart';

class home extends StatefulWidget {
  const home({Key? key}) : super(key: key);

  @override
  State<home> createState() => _homeState();

}

class _homeState extends State<home> {
  String pathPDF = "assets/arbo";

  @override

  void initState() {
    super.initState();
    fromAsset('assets/arbo.pdf', 'arbo.pdf').then((f) {
      setState(() {
        pathPDF = f.path;
      });
    });
  }
  Future<File> fromAsset(String asset, String filename) async {
    Completer<File> completer = Completer();
    try {
      var dir = await getApplicationDocumentsDirectory();
      File file = File("${dir.path}/$filename");
      var data = await rootBundle.load(asset);
      var bytes = data.buffer.asUint8List();
      await file.writeAsBytes(bytes, flush: true);
      completer.complete(file);
    } catch (e) {
      throw Exception('Error parsing asset file!');
    }

    return completer.future;

  }
  final FirebaseAuth auth = FirebaseAuth.instance;
  late final User? user = auth.currentUser;
  late final uid = user?.uid;

  Widget build(BuildContext context) {
    DocumentReference documentReference = FirebaseFirestore.instance.collection(uid!).doc("name");
    documentReference.get().then((datasnapshot){

      String name = datasnapshot.data().toString();
    });
    FirebaseFirestore.instance.collection(uid!);

    // to get size
    var size = MediaQuery.of(context).size;

    // style
    var cardTextStyle = TextStyle(
        fontFamily: "Montserrat Regular",
        fontSize: 14,
        color: Color.fromRGBO(63, 63, 63, 1));


    return Scaffold(

      body: Stack(
        children: <Widget>[
          Container(
            height: size.height * 1,
            decoration: BoxDecoration (gradient: LinearGradient(colors: [
          hexStringToColor("FFBEC8"),
          hexStringToColor("fe98a8"),
          hexStringToColor("FC98A7"),
          hexStringToColor("#FF8799")
        ]
          ))),
          SafeArea(
            child: Padding(
              padding: EdgeInsets.all(16.0),
              child: Column(
                children: <Widget>[
                  Container(
                    
                    height: 64,
                    margin: EdgeInsets.only(bottom: 20),
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        CircleAvatar(
                          radius: 29,
                          backgroundImage: AssetImage(
                              'assets/logo.png'),
                        ),
                        SizedBox(
                          width: 16,
                        ),
                        Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: <Widget>[
                            Text(
                              
                        "$name",
                              style: TextStyle(
                                  fontFamily: "Montserrat Medium",
                                  color: Colors.white,
                                  fontSize: 20),
                            ),

                          ],
                        )
                      ],
                    ),

                  ),

                  Expanded(
                    child: GridView.count(
                      mainAxisSpacing: 10,
                      crossAxisSpacing: 10,
                      primary: false,
                      crossAxisCount: 2,
                      children: <Widget>[
                        Card(
                          color: Colors.grey.shade100,
                          shape:RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(8)
                          ),

                          elevation: 4,
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
    //=> PDFScreen(path: pathPDF)),);
                            children: <Widget>[
                              GestureDetector(
                                onTap:
                          () =>
                        Navigator.of(context).push(PageTransition(
                      child: PDFScreen(path: pathPDF),
                    type: PageTransitionType.fade)),


                                  child:
                                  SvgPicture.asset(
                                    'assets/moon.svg',
                                    height: 120,
                                  )

                              ),
                              Text(
                                'Arbo-lijst',
                                style: cardTextStyle,
                              )
                            ],
                          ),
                        ),


                        Card(
                          color: Colors.grey.shade100,
                          shape:RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(8)
                          ),
                          elevation: 4,
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              GestureDetector(
                                  onTap:
                                      () =>
                                      Navigator.of(context).push(PageTransition(
                                          child: todolist(),
                                          type: PageTransitionType.fade)),


                                  child:
                                  SvgPicture.asset(
                                    'assets/moon.svg',
                                    height: 120,
                                  )

                              ),
                              Text(
                                "To do lijst",
                                style: cardTextStyle,
                              )
                            ],
                          ),
                        ),

                        Card(
                          color: Colors.grey.shade100,
                          shape:RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(8)
                          ),
                          elevation: 4,
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              GestureDetector(
                                  onTap:
                                      () =>
                                      Navigator.of(context).push(PageTransition(
                                          child: home(),
                                          type: PageTransitionType.fade)),


                                  child:
                                  SvgPicture.asset(
                                    'assets/moon.svg',
                                    height: 120,
                                  )

                              ),
                              Text(
                                'Uitzetlijst',
                                style: cardTextStyle,
                              )
                            ],
                          ),
                        ),

                        Card(
                          color: Colors.grey.shade100,
                          shape:RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(8)
                          ),
                          elevation: 4,
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              GestureDetector(
                                  onTap:
                                      () =>
                                      Navigator.of(context).push(PageTransition(
                                          child: inschrijven(),
                                          type: PageTransitionType.fade)),
                                  child:
                                  SvgPicture.asset(
                                    'assets/moon.svg',
                                    height: 120,
                                  )
                              ),
                              Text(
                                'Inschrijven',
                                style: cardTextStyle,
                              )
                            ],
                          ),
                        ),

                        Card(
                          color: Colors.grey.shade100,
                          shape:RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(8)
                          ),
                          elevation: 4,
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,

                            children: <Widget>[
                              GestureDetector(
                                  onTap:
                                      () =>
                                      Navigator.of(context).push(PageTransition(
                                          child: home(),
                                          type: PageTransitionType.fade)),


                                  child:
                                  SvgPicture.asset(
                                    'assets/moon.svg',
                                    height: 120,
                                  )

                              ),
                              Text(
                                'Opstart advies',
                                style: cardTextStyle,
                              )

                            ],
                          ),
                        ),

                        Card(
color: Colors.grey.shade100,
                          shape:RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(8)
                          ),

                          elevation: 4,
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              GestureDetector(
                                  onTap:
                                      () =>
                                      Navigator.of(context).push(PageTransition(
                                          child: contactpage(),
                                          type: PageTransitionType.fade)),


                                  child:
                                  SvgPicture.asset(
                                    'assets/moon.svg',
                                    height: 120,
                                  )

                              ),
                              Text(

                                'Contact',
                                style: cardTextStyle,
                              )
                            ],
                          ),
                        ),
                        Card(
                          color: Colors.grey.shade100,
                          shape:RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(8)
                          ),
                          elevation: 4,
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              GestureDetector(
                                  onTap:
                                      () =>
                                      Navigator.of(context).push(PageTransition(
                                          child: quiz_screen(),
                                          type: PageTransitionType.fade)),


                                  child:
                                  SvgPicture.asset(
                                    'assets/moon.svg',
                                    height: 120,
                                  )

                              ),
                              Text(

                                'Quiz',
                                style: cardTextStyle,
                              )
                            ],
                          ),
                        ),
                        Card(
                          color: Colors.grey.shade100,
                          shape:RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(8)

                          ),
                          elevation: 4,
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              GestureDetector(
                                  onTap:
                                      () =>
                                      Navigator.of(context).push(PageTransition(
                                          child: home(),
                                          type: PageTransitionType.fade)),


                                  child:
                                  SvgPicture.asset(
                                    'assets/moon.svg',
                                    height: 120,
                                  )

                              ),

                              Text(
                                'Kaart',
                                style: cardTextStyle,
                              )
                            ],
                          ),
                        ),
                      ],
                    ),
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }
}

CodePudding user response:

You need define name out of build method to access it in all your class:

String name = ''; //<-- define this

Widget build(BuildContext context) {
    DocumentReference documentReference = FirebaseFirestore.instance.collection(uid!).doc("name");
    documentReference.get().then((datasnapshot){

      name = datasnapshot.data().toString();//<-- change this
    });

 ...
}
  • Related