[英]Flutter, passing data with Navigator. type 'Null' is not a subtype of type 'String'
对颤振非常陌生,不知道为什么会这样。
问题在于发送数据:
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PressScreen(datas: dataSend),
));
以及获取数据的屏幕
final List<Map<String, dynamic>> datas;
PressScreen({Key? key, required this.datas}) : super(key: key);
List<Widget> textWidgetList = [];
@override
Widget build(BuildContext context) {
for (int i = 0; i < 8; i++) {
textWidgetList.add(
Container(
child: Text(datas[i][0]),
),
);
}
完整代码和错误如下:
main.dart
import 'dart:collection';
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_app_homework/selection.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final Future<FirebaseApp> _fbApp = Firebase.initializeApp();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FutureBuilder(
future: _fbApp,
builder: (context, snapshot) {
if (snapshot.hasError) {
print('You Have ERRORS! ${snapshot.error.toString()}');
return Text("Something Went wrong");
} else if (snapshot.hasData) {
print('ALL GOOD');
return MyHomePage(
title: 'home',
);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
));
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
FirebaseFirestore _firebase = FirebaseFirestore.instance;
String classNumPressed = "";
// DatabaseReference _testref = FirebaseDatabase.instance.reference().child('test');
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.teal,
appBar: AppBar(
title: Text("Demo"),
backgroundColor: Colors.blueGrey[900],
),
body: SafeArea(
child: Column(
children: <Widget>[
Card(
margin: EdgeInsets.symmetric(vertical: 10, horizontal: 20),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.white,
),
onPressed: () {
print('class 1 is presseed');
classNumPressed = 'Class1';
print(classNumPressed);
getSeat();
},
child: ListTile(
leading: Icon(
Icons.photo_camera,
color: Colors.black,
size: 60,
),
title: Text('Class 1',
style: TextStyle(
color: Colors.black,
fontSize: 50,
))),
),
),
Card(
margin: EdgeInsets.symmetric(vertical: 10, horizontal: 20),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.white,
),
onPressed: () {
print('class 2 is presseed');
classNumPressed = 'Class2';
print(classNumPressed);
getSeat();
},
child: ListTile(
leading: Icon(
Icons.photo_camera,
color: Colors.red,
size: 60,
),
title: Text('Class 2',
style: TextStyle(
color: Colors.black,
fontSize: 50,
))),
),
)
],
),
),
),
);
}
Future<void> getSeat() async {
print(classNumPressed);
List<Map<String, dynamic>> dataToSend = [];
QuerySnapshot seats = await _firebase.collection(classNumPressed).get();
final List allData = seats.docs.map((doc) => doc.data()).toList();
for (Map<String, dynamic> seat in allData) {
print("------------for loop");
print(seat);
dataToSend.add(seat);
}
print("------for loop datato send is ");
print(dataToSend);
print(dataToSend.length);
print("-------before transfer ");
final List<Map<String, dynamic>> dataSend = dataToSend;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PressScreen(datas: dataSend),
));
}
}
class PressScreen extends StatelessWidget {
final List<Map<String, dynamic>> datas;
PressScreen({Key? key, required this.datas}) : super(key: key);
List<Widget> textWidgetList = [];
@override
Widget build(BuildContext context) {
for (int i = 0; i < 8; i++) {
textWidgetList.add(
Container(
child: Text(datas[i][0]),
),
);
}
return Scaffold(
backgroundColor: Colors.teal,
body: SafeArea(
child: Center(
child: Column(
children: textWidgetList,
))));
}
}
错误信息
======== Exception caught by widgets library =======================================================
The following _TypeError was thrown building PressScreen(dirty):
type 'Null' is not a subtype of type 'String'
The relevant error-causing widget was:
PressScreen file:///Users/j.zhao8/AndroidStudioProjects/Cmput301Project/flutter_app_homework/lib/main.dart:141:33
When the exception was thrown, this was the stack:
#0 PressScreen.build (package:flutter_app_homework/main.dart:157:31)
#1 StatelessElement.build (package:flutter/src/widgets/framework.dart:4732:28)
#2 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4658:15)
#3 Element.rebuild (package:flutter/src/widgets/framework.dart:4348:5)
#4 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4636:5)
#5 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4631:5)
... Normal element mounting (169 frames)
#174 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3666:14)
#175 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6324:36)
#176 Element.updateChild (package:flutter/src/widgets/framework.dart:3418:18)
#177 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5749:32)
#178 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6347:17)
#179 Element.updateChild (package:flutter/src/widgets/framework.dart:3405:15)
#180 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4683:16)
#181 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4831:11)
#182 Element.rebuild (package:flutter/src/widgets/framework.dart:4348:5)
#183 StatefulElement.update (package:flutter/src/widgets/framework.dart:4863:5)
#184 Element.updateChild (package:flutter/src/widgets/framework.dart:3405:15)
#185 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4683:16)
#186 Element.rebuild (package:flutter/src/widgets/framework.dart:4348:5)
#187 ProxyElement.update (package:flutter/src/widgets/framework.dart:5011:5)
#188 Element.updateChild (package:flutter/src/widgets/framework.dart:3405:15)
#189 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4683:16)
#190 Element.rebuild (package:flutter/src/widgets/framework.dart:4348:5)
#191 ProxyElement.update (package:flutter/src/widgets/framework.dart:5011:5)
#192 _InheritedNotifierElement.update (package:flutter/src/widgets/inherited_notifier.dart:181:11)
#193 Element.updateChild (package:flutter/src/widgets/framework.dart:3405:15)
#194 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6193:14)
#195 Element.updateChild (package:flutter/src/widgets/framework.dart:3405:15)
#196 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4683:16)
#197 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4831:11)
#198 Element.rebuild (package:flutter/src/widgets/framework.dart:4348:5)
#199 StatefulElement.update (package:flutter/src/widgets/framework.dart:4863:5)
#200 Element.updateChild (package:flutter/src/widgets/framework.dart:3405:15)
#201 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6193:14)
#202 Element.updateChild (package:flutter/src/widgets/framework.dart:3405:15)
#203 SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6193:14)
#204 Element.updateChild (package:flutter/src/widgets/framework.dart:3405:15)
#205 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4683:16)
#206 Element.rebuild (package:flutter/src/widgets/framework.dart:4348:5)
#207 ProxyElement.update (package:flutter/src/widgets/framework.dart:5011:5)
#208 Element.updateChild (package:flutter/src/widgets/framework.dart:3405:15)
#209 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4683:16)
#210 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4831:11)
#211 Element.rebuild (package:flutter/src/widgets/framework.dart:4348:5)
#212 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2620:33)
#213 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:878:21)
#214 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:330:5)
#215 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1143:15)
#216 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1080:9)
#217 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:996:5)
#221 _invoke (dart:ui/hooks.dart:163:10)
#222 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:259:5)
#223 _drawFrame (dart:ui/hooks.dart:126:31)
(elided 3 frames from dart:async)
根据错误,我相信dataSend 中没有数据,请在推送到新屏幕之前尝试打印dataSend响应。
print(dataSend);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => PressScreen(datas: dataSend),
));
我太傻了! 错误出在child: Text(datas[i][0]),
身上child: Text(datas[i][0]),
就像Fatima ayaa
提到的那样,我解决了这个问题
Widget build(BuildContext context) {
for (int i = 0; i < datas.length; i++) {
var list = datas[i].values.toList();
textWidgetList.add(
Container(
child: Text(list[0].toString()),
),
);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.