Flutter 如何解决;NoSuchMethodError:方法';FindEnderObject';被调用时为null“;错误?
我正试图保存一个QR图像并为此添加共享选项,但在这样做的同时,我遇到了这个“FindEnderObject在null上被调用”对象 如何解决此错误?这是下面的代码 生成快速省道Flutter 如何解决;NoSuchMethodError:方法';FindEnderObject';被调用时为null“;错误?,flutter,google-cloud-firestore,flutter-layout,qr-code,flutter-dependencies,Flutter,Google Cloud Firestore,Flutter Layout,Qr Code,Flutter Dependencies,我正试图保存一个QR图像并为此添加共享选项,但在这样做的同时,我遇到了这个“FindEnderObject在null上被调用”对象 如何解决此错误?这是下面的代码 生成快速省道 import 'package:attendee/services/database.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; impor
import 'package:attendee/services/database.dart';
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:path_provider/path_provider.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'dart:ui';
import 'package:flutter/rendering.dart';
import 'package:intl/intl.dart';
import 'package:attendee/constants.dart';
import 'dart:async';
import 'dart:io';
import 'dart:typed_data';
class GeneratePage extends StatefulWidget {
@override
State<StatefulWidget> createState() => GeneratePageState();
}
class GeneratePageState extends State<GeneratePage> {
String qrData =
"https://github.com/neon97"; // already generated qr code when the page opens
FirebaseAuth auth = FirebaseAuth.instance;
String subject;
GlobalKey globalKey = new GlobalKey();
final CollectionReference student_details =
FirebaseFirestore.instance.collection('students');
final CollectionReference tutor_details =
FirebaseFirestore.instance.collection("tutors");
String timeString;
bool _validate = false;
// String formattedDate = DateFormat('kk:mm:ss \n EEE d MMM').format(now);
static const double _topSectionTopPadding = 50.0;
static const double _topSectionBottomPadding = 20.0;
static const double _topSectionHeight = 50.0;
void _getTime() {
final String formattedDateTime =
DateFormat('yyyy-MM-dd \n kk:mm:ss').format(DateTime.now()).toString();
//DateFormat('yyyy-MM-dd').toString();
setState(() {
timeString = formattedDateTime;
});
}
@override
void initState() {
super.initState();
Timer.periodic(Duration(seconds: 1), (Timer t) => _getTime());
}
@override
Widget build(BuildContext context) {
var numberOfClasses;
return Scaffold(
appBar: AppBar(
title: Text('QR Code Generator'),
actions: <Widget>[
IconButton(
icon: Icon(Icons.share),
onPressed: _captureAndSharePng,
)
],
),
body: SingleChildScrollView(
child: Container(
padding: EdgeInsets.all(20.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
QrImage(
//plce where the QR Image will be shown
data: qrData,
),
SizedBox(
height: 40.0,
),
Text(
"New QR Link Generator",
style: TextStyle(fontSize: 20.0),
),
TextField(
controller: qrdataFeed,
decoration: InputDecoration(
hintText: "SUBJECT-anything",
errorText:
_validate ? "Please enter in Sub-Date format!" : null,
),
),
Padding(
padding: EdgeInsets.fromLTRB(40, 20, 40, 0),
child: MaterialButton(
minWidth: double.infinity,
height: 60,
onPressed: () async {
qrdataFeed.text
.contains(RegExp(r'^[a-zA-Z]*\-[a-zA-Z]*$'))
? _validate = false
: _validate = true;
if (qrdataFeed.text.isEmpty) {
//a little validation for the textfield
if (!mounted) return;
setState(() {
qrData = "";
});
} else {
int index = qrdataFeed.text.indexOf('-');
subject = qrdataFeed.text.substring(0, index);
print("Subject name is $subject");
String user = isTutor ? "tutors" : "students";
String uid = FirebaseAuth.instance.currentUser.uid;
numberOfClasses = await FirebaseFirestore.instance
.collection(user)
.doc(uid)
.get()
.then((value) {
return value.data()['numberOfClasses'];
});
String rollno = await FirebaseFirestore.instance
.collection(user)
.doc(uid)
.get()
.then((value) {
return value.data()['rollno'];
});
print('$numberOfClasses is printed pehle');
await DatabaseService().attendance(rollno);
setState(() {
qrData = qrdataFeed.text;
scanned = true;
print('done');
numberOfClasses += 1; //idhar se dekhke
print('$numberOfClasses is printed');
});
await tutor_details.doc(uid).set(
{'numberOfClasses': numberOfClasses},
SetOptions(merge: true));
}
},
shape: RoundedRectangleBorder(
side: BorderSide(
color: Colors.black,
),
borderRadius: BorderRadius.circular(50)),
child: Text(
"Generate QR",
style:
TextStyle(fontWeight: FontWeight.w600, fontSize: 18),
),
)),
],
),
),
),
);
}
final qrdataFeed = TextEditingController();
Future<void> _captureAndSharePng() async {
try {
RenderRepaintBoundary boundary =
globalKey.currentContext.findRenderObject();
print(boundary);
var image = await boundary.toImage();
ByteData byteData = await image.toByteData(format: ImageByteFormat.png);
Uint8List pngBytes = byteData.buffer.asUint8List();
final tempDir = await getTemporaryDirectory();
final file = await new File('${tempDir.path}/image.png').create();
await file.writeAsBytes(pngBytes);
final channel = const MethodChannel('channel:me.attendee.share/share');
channel.invokeMethod('shareFile', 'image.png');
} catch (e) {
print(e.toString());
}
}
}
import'包:attendee/services/database.dart';
导入“包:cloud_firestore/cloud_firestore.dart”;
导入“包:firebase_auth/firebase_auth.dart”;
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
导入“package:path_provider/path_provider.dart”;
进口“包装:qr_颤振/qr_颤振.飞镖”;
导入“dart:ui”;
导入“package:flatter/rendering.dart”;
导入“包:intl/intl.dart”;
导入“package:attendee/constants.dart”;
导入“dart:async”;
导入“dart:io”;
导入“dart:键入的_数据”;
类GeneratePage扩展StatefulWidget{
@凌驾
State createState()=>GeneratePageState();
}
类GeneratePageState扩展了状态{
字符串数据=
"https://github.com/neon97“;//页面打开时已生成二维码
FirebaseAuth auth=FirebaseAuth.instance;
字符串主题;
GlobalKey GlobalKey=新的GlobalKey();
最终收集参考学生详细信息=
FirebaseFirestore.instance.collection('students');
最终收藏参考资料=
FirebaseFirestore.instance.collection(“导师”);
字符串时间字符串;
bool _validate=false;
//字符串formattedDate=DateFormat('kk:mm:ss\n EEE d MMM')。格式(现在);
静态常数double _=50.0;
静态常数double _topSectionBottomPadding=20.0;
静态常数双上断面高度=50.0;
void _getTime(){
最终字符串formattedDateTime=
DateFormat('yyyy-MM-dd\n kk:MM:ss').format(DateTime.now()).toString();
//DateFormat('yyyy-MM-dd')。toString();
设置状态(){
timeString=formattedDateTime;
});
}
@凌驾
void initState(){
super.initState();
Timer.periodic(持续时间(秒:1),(Timer t)=>\u getTime());
}
@凌驾
小部件构建(构建上下文){
var数类;
返回脚手架(
appBar:appBar(
标题:文本(“二维码生成器”),
行动:[
图标按钮(
图标:图标(Icons.share),
按下按钮:\ U captureAndSharePng,
)
],
),
正文:SingleChildScrollView(
子:容器(
填充:所有边缘设置(20.0),
子:列(
crossAxisAlignment:crossAxisAlignment.stretch,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
QrImage(
//将显示QR图像的plce
数据:qrData,
),
大小盒子(
身高:40.0,
),
正文(
“新的QR链接生成器”,
样式:TextStyle(fontSize:20.0),
),
文本字段(
控制器:qrdataFeed,
装饰:输入装饰(
hintText:“任何主题”,
错误文本:
_验证?“请以子日期格式输入!”:空,
),
),
填充物(
填充:从LTRB(40,20,40,0)开始的边缘设置,
子:材质按钮(
minWidth:double.infinity,
身高:60,
onPressed:()异步{
qrdataFeed.text
.contains(RegExp(r'^[a-zA-Z]*\-[a-zA-Z]*$))
?_validate=false
:_validate=true;
if(qrdataFeed.text.isEmpty){
//对textfield进行一点验证
如果(!已安装)返回;
设置状态(){
qrData=“”;
});
}否则{
int index=qrdataFeed.text.indexOf('-');
subject=qrdataFeed.text.substring(0,索引);
打印(“主题名称为$Subject”);
字符串user=isTutor?“导师”:“学生”;
字符串uid=FirebaseAuth.instance.currentUser.uid;
numberOfClasses=等待FirebaseFirestore.instance
.收集(用户)
.doc(uid)
.get()
.然后((值){
返回值.data()['numberOfClasses'];
});
String rollno=wait FirebaseFirestore.instance
.收集(用户)
.doc(uid)
.get()
.然后((值){
返回值.data()['rollno'];
});
打印(“$numberOfClasses打印为pehle”);
等待DatabaseService().出勤(rollno);
设置状态(){
qrData=qrdataFeed.text;
扫描=真;
打印(“完成”);
numberOfClasses+=1;//idhar se dekhke
打印(“$numberOfClasses已打印”);
});
等待详细信息。文档(uid)。设置(
{'numberOfClasses':numberOfClasses},
SetOptions(合并:true));
}
},
形状:圆形矩形边框(
边线(
颜色:颜色,黑色,
),
边界半径:边界半径。圆形(50)),
RenderRepaintBoundary boundary = globalKey.currentContext.findRenderObject();