【问题标题】:1 positional argument(s) expected, but 0 found. in the widget test.dart需要 1 个位置参数,但找到了 0 个。在小部件 test.dart
【发布时间】:2021-08-05 04:18:50
【问题描述】:

我正在编写一个旅行应用程序,其中包含多个位置详细信息和事实列表。现在我想为几个位置列表制作一个列表视图。但是在写完 widget_test.dart 后告诉我,我期望位置参数,但找到了 0。我不明白它在 widget_test.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();
        }

  }

小部件 test.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);

}

希望你能帮助我

【问题讨论】:

    标签: flutter


    【解决方案1】:

    啊,你的LocationDetail好像用错了。

    widget test.dart,你写了await tester.pumpWidget(LocationDetail());

    但是,在你的构造函数中,你有LocationDetail(this._locationID);。因此,每当您使用 LocationDetail 小部件时,您都会传递此 _locationID 参数。

    所以像这样使用它,await tester.pumpWidget(LocationDetail(1)); 。但是您可以将1 替换为您认为合适的任何内容。

    更多关于parametersDart的信息,请关注this

    【讨论】:

    • 非常感谢您的帮助和宝贵的时间。你的回答对我很有用。我的项目现在已经没有错误了。
    • 很高兴有帮助:)。请考虑接受答案,以便它可以帮助其他有类似问题的人。
    猜你喜欢
    • 2022-01-19
    • 2019-03-18
    • 2021-05-22
    • 2021-12-18
    • 2021-07-27
    • 2021-10-23
    • 2019-02-04
    • 2020-06-13
    • 1970-01-01
    相关资源
    最近更新 更多