需要1个位置参数,但找到0个.在小部件test.dart中



我正在编写一个旅游应用程序,它有几个位置详细信息和事实列表。现在我想为几个位置列表做一个列表视图。但在编写完widget_test.dart后,告诉我我需要位置参数,但找到了0。我不明白它在widgettest.dart中是什么意思。我问了很多人,但没人知道。你能帮忙吗。这是我的密码。错误部分在这里

await tester. pumpWidget(LocationDetail());

我的整个代码行屏幕文件

import 'package:flutter/material.dart';
import 'style.dart';
import 'main.dart';
import 'locationroutefile.dart';
const LocationsRoute='/';
const LocationDetailRoute='/location_detail';
class App extends StatelessWidget{
@override
Widget build (BuildContext context){
return MaterialApp(
onGenerateRoute: _routes(),
theme:_theme(),
);
}
RouteFactory _routes() {
return (settings) {
final Map<String, dynamic> arguments = settings.arguments;
Widget screen;
switch (settings.name) {
case LocationsRoute:
screen = LocationListView();
break;
case LocationDetailRoute:
screen = LocationDetail(arguments['id']);
break;
default:
return null;
}
return MaterialPageRoute(builder: (BuildContext context) => screen);
};
}
ThemeData _theme() {
return ThemeData(
appBarTheme: AppBarTheme(textTheme: TextTheme(headline6: AppBarTextStyle)),
textTheme: TextTheme(
headline6: TitleTextStyle,
bodyText2: Body1TextStyle,
));
}
}

main.dart

import 'package:flutter/material.dart';
import 'package:second_tutorial/screen.dart';
import 'textSection.dart';
import 'image_banner.dart';
import 'location.dart';
import 'screen.dart';
void main() => runApp(App());
class LocationDetail extends StatelessWidget {
final int _locationID;
LocationDetail(this._locationID);
@override
Widget build(BuildContext context) {
final location  = Location.fetchByID(_locationID);

return MaterialApp(
title:'second tutorial from youtube ',
home: Scaffold(
appBar: AppBar(
title: Text(location.name),
),
body:Column(
mainAxisAlignment: MainAxisAlignment. start,
children: [
ImageBanner(location.imagePath),
]..addAll(textSections(location))),
),
);
}
List<Widget> textSections (Location location){
return location .babi.map((babb) => TextSection (babb.title,babb.text)).toList();
}
}

小工具测试.dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:second_tutorial/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(LocationDetail());
// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}

位置文件

import 'location_fact.dart';
class Location{
final int id;
final String name;
final String imagePath;
final List<LocationFact> babi;

Location (this.id,this.name,this.imagePath,this.babi);

static List<Location> fetchAll() {
return [
Location(1, 'Kiyomizu-dera', 'assets/images/kiyomizu-dera.jpg', [
LocationFact('summary', ';ldjf;ja;ldjf;lajdl;jf;adj;lakdjf;jad;fj'),
]),
Location(2, 'Mount Fuji', 'assets/images/fuji.jpg', [
LocationFact('summary', 'hflajd;lfj;ladjf;lj;dljf;aj'),
]),
Location(3, 'Arashiyama Bamboo Grove', 'assets/images/arashiyama.jpg',[
LocationFact('sumary ', 'aldjf;lajd;lfj;aldjf;ladjf;lkj')
]),
];
}
static Location fetchByID(int locationadfadfID){
List<Location> asdfgh = Location.fetchAll();
for(var i =0;i <asdfgh.length; i++){
if(asdfgh[i].id == locationadfadfID){
return asdfgh[i];
}
}
return null;
}
}

位置列表视图.dart

import 'package:flutter/material.dart';
import 'package:second_tutorial/screen.dart';
import 'location.dart';
class LocationListView extends StatelessWidget{
@override
Widget build(BuildContext context){
final variables = Location.fetchAll(); 
return Scaffold(
appBar: AppBar(
title: Text('location route file'),
),
body: ListView(
children: variables
.map((testing) => GestureDetector(child:Text(testing.name), onTap:()=> onLocationTap(context, testing.id),)).toList()

),
);
}
onLocationTap(BuildContext context, int locationID) {
Navigator.pushNamed(context, LocationsRoute, arguments: {'id': locationID});
}
}

位置事实

class LocationFact {
final String title;
final String text;
LocationFact(this.title,this.text);
}

希望你能帮助我

啊,您似乎使用LocationDetail不正确。

widget test.dart中,您已经编写了await tester.pumpWidget(LocationDetail());

但是,在构造函数中,您有LocationDetail(this._locationID);。因此,无论何时使用LocationDetail小部件,都必须传递此_locationID参数。

所以用这样的方式,await tester.pumpWidget(LocationDetail(1));。但是你可以用任何你觉得合适的东西来代替1

关于Dartparameters的更多信息,请按此操作。

最新更新