在我單擊一次按鈕并回傳并嘗試再次單擊后,我得到了他的錯誤。請讓我知道我做錯了什么。謝謝!
import "package:flutter/material.dart";
import "historicalfigureinfo.dart";
void main() {
runApp(const MaterialApp(home: Hwk3()));
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return const MaterialApp();
}
}
class Hwk3 extends StatefulWidget {
const Hwk3({Key? key}) : super(key: key);
@override
_Hwk3State createState() => _Hwk3State();
}
class _Hwk3State extends State<Hwk3> {
var nameArray = [
'Abraham Lincoln',
'Benito Juarez',
'Claude Monet',
'Charles Darwin',
'Deng Xiaoping',
'Frederick Chopin',
'George Washington Carver',
'Georgia O\'Keeffe',
'Mahatma Gandhi',
'Mark Twain',
'Muhammad Jinnah',
'Pablo Picasso',
'Santos Dumont'
];
List<Route> historicalfigures= [
MaterialPageRoute(builder: (_) => AbrahamLincoln()),
MaterialPageRoute(builder: (_) => BenitoJuarez()),
MaterialPageRoute(builder: (_) => ClaudeMonet()),
MaterialPageRoute(builder: (_) => CharlesDarwin()),
MaterialPageRoute(builder: (_) => DengXiaoping()),
MaterialPageRoute(builder: (_) => FredericChopin()),
MaterialPageRoute(builder: (_) => GeorgeWashingtonCarver()),
MaterialPageRoute(builder: (_) => GeorgiaOkeeffe()),
MaterialPageRoute(builder: (_) => MahatmaGandhi()),
MaterialPageRoute(builder: (_) => MarkTwain()),
MaterialPageRoute(builder: (_) => MuhammadJinnah()),
MaterialPageRoute(builder: (_) => PabloPicasso()),
MaterialPageRoute(builder: (_) => SantosDumont()),
];
@override
Widget build(BuildContext context) {
List<Route> myRoute = [];
return Scaffold(
appBar: AppBar(
title: const Text('Historical Figures'),
),
body: ListView.builder(
itemCount: nameArray.length,
itemBuilder: (BuildContext context, index) {
return ListTile(
title: Text(nameArray[index]),
trailing: Icon(Icons.info_outlined),
onTap: () {
Navigator.of(context).push(historicalfigures[index]);
},
);
},
),
);
}
}
這是我得到的錯誤。似乎它在我使用它后釋放了按鈕并且沒有重置它。該按鈕應該轉到另一個頁面/不同的頁面,具體取決于我根據它旁邊的歷史名稱按下哪個按鈕。雖然只作業一次
Launching lib/main.dart on iPhone 13 in debug mode...
Running Xcode build...
Xcode build done. 6.6s
Debug service listening on ws://127.0.0.1:56466/gVaIxfjPH28=/ws
Syncing files to device iPhone 13...
======== Exception caught by gesture ===============================================================
The following assertion was thrown while handling a gesture:
Cannot install a MaterialPageRoute<dynamic> after disposing it.
'package:flutter/src/widgets/routes.dart':
Failed assertion: line 204 pos 12: '!_transitionCompleter.isCompleted'
Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
https://github.com/flutter/flutter/issues/new?template=2_bug.md
When the exception was thrown, this was the stack:
#2 TransitionRoute.install (package:flutter/src/widgets/routes.dart:204:12)
#3 ModalRoute.install (package:flutter/src/widgets/routes.dart:1125:11)
#4 _RouteEntry.handlePush (package:flutter/src/widgets/navigator.dart:3021:11)
#5 NavigatorState._flushHistoryUpdates (package:flutter/src/widgets/navigator.dart:3992:17)
#6 NavigatorState._pushEntry (package:flutter/src/widgets/navigator.dart:4604:5)
#7 NavigatorState.push (package:flutter/src/widgets/navigator.dart:4511:5)
#8 _Hwk3State.build.<anonymous closure>.<anonymous closure> (package:historical_figures/main.dart:66:37)
#9 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:989:21)
#10 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:193:24)
#11 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:608:11)
#12 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
#13 BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:267:7)
#14 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27)
#15 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:444:20)
#16 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:420:22)
#17 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:278:11)
#18 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:374:7)
#19 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:338:5)
#20 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:296:7)
#21 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:279:7)
#25 _invoke1 (dart:ui/hooks.dart:185:10)
#26 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:293:7)
#27 _dispatchPointerDataPacket (dart:ui/hooks.dart:98:31)
(elided 5 frames from class _AssertionError and dart:async)
Handler: "onTap"
uj5u.com熱心網友回復:
首先你的 MyApp 類沒用,洗掉它!因為你從不使用它
這節課
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return const MaterialApp();
}
}
其次,洗掉路線串列(historicalfigures)。在主螢屏上寫下您的路線不是正確的方法。
List<Route> historicalfigures= [
MaterialPageRoute(builder: (_) => AbrahamLincoln()),
MaterialPageRoute(builder: (_) => BenitoJuarez()),
MaterialPageRoute(builder: (_) => ClaudeMonet()),
MaterialPageRoute(builder: (_) => CharlesDarwin()),
MaterialPageRoute(builder: (_) => DengXiaoping()),
MaterialPageRoute(builder: (_) => FredericChopin()),
MaterialPageRoute(builder: (_) => GeorgeWashingtonCarver()),
MaterialPageRoute(builder: (_) => GeorgiaOkeeffe()),
MaterialPageRoute(builder: (_) => MahatmaGandhi()),
MaterialPageRoute(builder: (_) => MarkTwain()),
MaterialPageRoute(builder: (_) => MuhammadJinnah()),
MaterialPageRoute(builder: (_) => PabloPicasso()),
MaterialPageRoute(builder: (_) => SantosDumont()),
];
螢屏之間的導航將從一個地方組織起來。
Navigator.push(
context,
MaterialPageRoute(
builder: (builder) =>
HistoricalFigure(name: nameArray[index])));
主要.dart
import "package:flutter/material.dart";
import "historicalfigureinfo.dart";
//This your main function material app is run and Hwk3 is the home property.
void main() {
runApp(const MaterialApp(
home: Hwk3(),
));
}
class Hwk3 extends StatefulWidget {
const Hwk3({Key? key}) : super(key: key);
@override
_Hwk3State createState() => _Hwk3State();
}
class _Hwk3State extends State<Hwk3> {
var nameArray = [
'Abraham Lincoln',
'Benito Juarez',
'Claude Monet',
'Charles Darwin',
'Deng Xiaoping',
'Frederick Chopin',
'George Washington Carver',
'Georgia O\'Keeffe',
'Mahatma Gandhi',
'Mark Twain',
'Muhammad Jinnah',
'Pablo Picasso',
'Santos Dumont'
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Historical Figures'),
),
body: ListView.builder(
itemCount: nameArray.length,
itemBuilder: (BuildContext context, index) {
return ListTile(
title: Text(nameArray[index]),
trailing: const Icon(Icons.info_outlined),
onTap: () {
/*
You dont need to create a new page for each historical figure
that's the beauty of programming. Now we have only one screen
named as HistoricalFigure. We have a constructor that takes
the name of the figure as a parameter.
*/
Navigator.push(
context,
MaterialPageRoute(
builder: (builder) =>
HistoricalFigure(name: nameArray[index])));
},
);
},
),
);
}
}
Now we have only one screen named as HistoricalFigure. We will display all the information about them on this screen. You don't need to create a new page for each historical figure that's the beauty of programming. Assume we have thousands of artists, what should we do? Should we create a screen for each of them? Of course not. Now we have only one screen named as HistoricalFigure. We have a constructor that takes the name of the figure as a parameter. If you're not familiar with OOP design I highly suggest you study it.
historicalfigure.dart
import 'package:flutter/material.dart';
class HistoricalFigure extends StatelessWidget {
final String name;
//this is your constructor of the screen
const HistoricalFigure({Key? key, required this.name}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Center(
child: SingleChildScrollView(
child: Column(
children: [
Text(name),
ElevatedButton(onPressed: (){
Navigator.pop(context);
}, child: const Text("Go to Home"))
],
),
),
),
),
);
}
}
If any question pops, feel free to ask.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/435791.html
下一篇:在顫動中路由按鈕時不斷出錯
