【问题标题】:The argument type 'Object?' can't be assigned to the parameter type 'Widget?'参数类型“对象?”不能分配给参数类型“Widget?”
【发布时间】:2021-08-05 08:45:44
【问题描述】:

我正在学习教程,但出现此错误

' 参数类型 'Object?'不能分配给参数类型'Widget?'.dartargument_type_not_assignable'。

我试图查看文档,但我确实知道如何解决错误

import 'package:flutter/material.dart';
import 'search.dart';
import 'user_info.dart';

import 'cart.dart';
import 'feed.dart';
import 'home.dart';

class BottomBarScreen extends StatefulWidget {
  @override
  _BottomBarScreenState createState() => _BottomBarScreenState();
}

class _BottomBarScreenState extends State<BottomBarScreen> {
  List<Map<String, Object>> _pages;
  int _selectedPageIndex = 0;

  @override
  void initState() {
    _pages = [
      {
        'page': home(),
     },
      {
        'page': feed(),
      },
      {
        'page': search(),
      },
  {
    'page': cart(),
  },
  {
    'page': user_info(),
  },
];
super.initState();
  }

  void _selectPage(int index) {
    setState(() {
    _selectedPageIndex = index;
   });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _pages[_selectedPageIndex]['page'],

【问题讨论】:

  • 地图类型应该是 你需要返回 Widget 而不是 Object 到 body

标签: flutter mobile-development


【解决方案1】:

在开始时,您将_pages 定义为List&lt;Map&lt;String, Object&gt;&gt; _pages

这意味着你只告诉 Dart Map 中的值只会是 Object。

你已经这样清楚地指定了,

List<Map<String, Widget>> _pages;

以便 Dart 了解您实际上存储的是 Widgets 而不仅仅是 Objects。

当您将其用作 Scaffold's 主体时,body 需要 Widget。但从你之前的定义来看,Dart 只能说你给它一个Object,这显然是行不通的。

【讨论】:

    【解决方案2】:

    尝试使用 body: _pages[_selectedPageIndex]['page'] as Widget,

    它将解决您的问题。

    【讨论】:

      【解决方案3】:

      您是否正在尝试创建底部导航栏?如果是,则检查以下代码

        import 'package:convex_bottom_bar/convex_bottom_bar.dart';
        import 'package:flutter/material.dart';
        import 'Home.dart';
        import 'Fav.dart';
        import 'Search.dart';
        import 'Profile.dart';
      
        void main() {
                 runApp(MyApp());
        }
      
        class MyApp extends StatelessWidget {
                     // This widget is the root of your application.
         @override
                  Widget build(BuildContext context) {
                 return MaterialApp(
                      title: 'Flutter Demo',
                      theme: ThemeData(
      
                      primarySwatch: Colors.blue,
      
                      visualDensity: VisualDensity.adaptivePlatformDensity,
                  ),
                  home: MyHomePage(title: 'Flutter Convex Bottom Bar'),
                 );
              }
          }
      
              class MyHomePage extends StatefulWidget {
                  MyHomePage({Key key, this.title}) : super(key: key);
      
                   final String title;
      
                   @override
                   _MyHomePageState createState() => _MyHomePageState();
                  }
      
               class _MyHomePageState extends State<MyHomePage> {
      
                  int selectedPage = 0; // user selected page, initial 0 index page"Home()" 
                  will be displayed to user
              
                   final _pageOptions = [Home(),  Fav(),Search(), Profile()]; //4 different page where user can navigate.
      
      
               @override
               Widget build(BuildContext context) {
      
                  return Scaffold(
                      appBar: AppBar(
                                title: Text(widget.title),
                               ),
                      body: _pageOptions[selectedPage],
                      bottomNavigationBar: ConvexAppBar(
      
                            items: [
                                TabItem(icon: Icons.home, title: 'Home'),
                                TabItem(icon: Icons.favorite, title: 'Favorites'),
                                TabItem(icon: Icons.search, title: 'Search'),
                                TabItem(icon: Icons.person, title: 'Profile'),
                              ],
                            initialActiveIndex: 0,//optional, default as 0
                            onTap: (int i ){
                                      setState(() {
                                          selectedPage = I;
                                      });
                                    },
                           ),// This trailing comma makes auto-formatting nicer for build 
                            methods.
                          );
                        }
                     }
      

      【讨论】:

        【解决方案4】:

        我遇到了同样的情况,但我在地图声明中解决了问题:

        List<Map<String, dynamic>> _pages;
        
        

        SDK 环境:">=2.12.0

        【讨论】:

          【解决方案5】:

          我将它的形式 (List> _pages;) 更改为 后期列表> _pages;一切正常。

          当我在 Scaffold 的正文中使用它时,例如 (body: _pages[_selectedPageIndex]['page'],)

          body 需要一个 Widget。但是从你之前的定义来看,Dart 只能说你给了它一个 Object,这显然是行不通的。

          【讨论】:

            猜你喜欢
            • 2019-12-06
            • 2021-08-23
            • 2020-01-10
            • 2021-10-04
            • 2021-09-13
            • 2021-11-11
            • 2021-07-04
            • 2021-07-06
            • 2021-03-19
            相关资源
            最近更新 更多