【问题标题】:type '(String) => dynamic' is not a subtype of type 'Widget'type '(String) => dynamic' 不是 'Widget' 类型的子类型
【发布时间】:2023-03-27 22:30:01
【问题描述】:

我正在尝试使用命名路由导航到页面。

主文件中的路由:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'FlutterShare',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.deepPurple,
        accentColor: Colors.teal,
      ),
      home: Home(),
      routes: {
        '/search': (BuildContext context) => Search(),
      },
    );
  }
}

推送到页面:

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        centerTitle: true,
        title: Text('BookClub'),
        actions: [
          IconButton(
              icon: Icon(Icons.add),
              onPressed: () {
                Navigator.of(context).pushNamed('/search');
              })
        ],
      ),
      drawer: AppDrawer(),
    );
  }
}

错误:

type '(String) => dynamic' is not a subtype of type 'Widget'
The relevant error-causing widget was
  Search                            lib\main.dart:21

这是我第一次构建应用程序,但我没有得到解决方案。 错误出现在 main.dart 文件中的路由中。

搜索代码:

class Search extends StatefulWidget {
  @override
  _SearchState createState() => _SearchState();
}

class _SearchState extends State<Search> {
  TextEditingController searchController = TextEditingController();
  Future<QuerySnapshot> searchResultsFuture;

      
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Theme.of(context).primaryColor.withOpacity(0.8),
      appBar: buildSearchField(),
      body: buildNoContent()
    );
  }
}

  AppBar buildSearchField() {
    return AppBar(
      backgroundColor: Colors.white,
      title: TextFormField(
        controller: searchController,
        decoration: InputDecoration(
          hintText: "Search for a book",
          filled: true,
          prefixIcon: Icon(
            Icons.account_box,
            size: 28.0,
          ),
          suffixIcon: IconButton(
            icon: Icon(Icons.clear),
            onPressed: null,
          ),
        ),
        onFieldSubmitted: null,
      ),
    );
  }

  Container buildNoContent() {
    final Orientation orientation = MediaQuery.of(context).orientation;
    return Container(
      child: Center(
        child: ListView(
          shrinkWrap: true,
          children: <Widget>[
            SvgPicture.asset(
              'assets/images/search.svg',
              height: orientation == Orientation.portrait ? 300.0 : 200.0,
            ),
            Text(
              "Find Users",
              textAlign: TextAlign.center,
              style: TextStyle(
                color: Colors.white,
                fontStyle: FontStyle.italic,
                fontWeight: FontWeight.w600,
                fontSize: 60.0,
              ),
            ),
          ],
        ),
      ),
    );
  }

希望这会有所帮助。从过去的 3 个小时开始,我一直被困在这个问题上,找不到任何可以解决的问题。

【问题讨论】:

  • 根据给出的错误信息,您应该检查 main.dart 的第 21 行
  • 请分享您的搜索代码
  • @JideGuru 已添加!
  • 你的主文件是home: Home(),但你的家庭类是HomeScreen()。我在这里错过了什么吗?
  • @user6327816 Home() 是与 HomeScreen() 不同的小部件。

标签: flutter dart flutter-navigation


【解决方案1】:

main.dart。您必须将起始页添加到 initialRoute。您可以删除 'home' 参数。

    initialRoute: HomeScreen(),
    routes: {
              "/search" (context) => Search()
          },

所以,home.dart 文件在里面;

Navigator.of(context).pushNamed('/search');

【讨论】:

    猜你喜欢
    • 2019-01-26
    • 2021-06-19
    • 2019-05-02
    • 2020-03-04
    • 2021-01-22
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多