颤振未找到材料小部件

Posted

技术标签:

【中文标题】颤振未找到材料小部件【英文标题】:Flutter No Material widget found 【发布时间】:2021-12-18 12:03:22 【问题描述】:

我想在 Flutter 中使用变异 graphql。 但我有这个按摩,我无法加载我的代码。

这是我的代码:

import 'package:flutter/material.dart';
import 'package:graphql_flutter/graphql_flutter.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget 
  const MyApp(Key? key) : super(key: key);

  @override
  Widget build(BuildContext context) 
    final HttpLink httpLink = HttpLink(
      'https://test.podkadeh.ir/graphql/',
    );
    final ValueNotifier<GraphQLClient> client= ValueNotifier<GraphQLClient>(
        GraphQLClient(
          link: httpLink,
          cache: GraphQLCache(),
        )
    );
    return GraphQLProvider(
      child:   HomePage(),
      client: client,
    );
  


class HomePage extends StatelessWidget 
  TextEditingController nameController = TextEditingController();
  TextEditingController emailController = TextEditingController();
  TextEditingController passwordController = TextEditingController();

  String createUser = '''
      mutation createUser
        createUser(userInput: Email: "$String", Password: "$String")
          Name,
          Email
        
      
''';

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      home: SingleChildScrollView(

          child: Column(
            children: [
              Mutation(
                options: MutationOptions(
                  document: gql(createUser),

                ),

                builder:(
                    RunMutation insert,
                    QueryResult? result,
                    )
                  return
                    Column(
                      children: [
                        TextField(
                          decoration:  InputDecoration(hintText: "Name"),
                          controller: nameController,
                        ),
                        TextField(
                          decoration:  InputDecoration(hintText: "Email"),
                          controller: emailController,

                        ),
                        TextField(
                          decoration:  InputDecoration(hintText: "Password"),
                          controller: passwordController,

                        ),
                        RaisedButton(
                            child: Text("Submit"),
                            onPressed:()
                              insert(<String, dynamic>
                                "Email": emailController.text,
                                "Name" : nameController.text,
                                // "Password" : passwordController.text,
                              );
                            ),
                        Text("Result : \n $result!.data?.toString()",),
                      ],
                    );

                ,

              ),
            ],
          ),

      ),
    );
  

这是我得到的错误:

`未找到材质小部件。

TextField 小部件需要一个 Material 小部件祖先。 在材料设计中,大多数小部件在概念上都“打印”在一张材料上。在 Flutter 的材质库中,该材质由 Material 小部件表示。例如,渲染墨水飞溅的是 Material 小部件。正因为如此,许多材质库小部件都要求它们上方的树中有一个 Material 小部件。

要引入 Material 小部件,您可以直接包含一个,也可以使用包含 Material 本身的小部件,例如 Card、Dialog、Drawer 或 Scaffold。

找不到 Material 祖先的特定小部件是:TextField 控制器:TextEditingController#c0f68(TextEditingValue(文本:┤├,选择:TextSelection(baseOffset:-1,extentOffset:-1,affinity:TextAffinity.downstream,isDirectional:false),撰写:TextRange(开始:-1,结束:- 1))) 装饰:InputDecoration(hintText:“名称”) 肮脏的 依赖项:[UnmanagedRestorationScope,MediaQuery] 状态:_TextFieldState#49d5d 这个小部件的祖先是: : 柱子 方向:垂直 mainAxisAlignment:开始 crossAxisAlignment:中心 renderObject: RenderFlex#ce4db 需要-布局需要-油漆 : StreamBuilder 状态:_StreamBuilderBaseState>#26355 : 突变 依赖项:[_InheritedGraphQLProvider] 状态:突变状态#0e229 : 柱子 方向:垂直 mainAxisAlignment:开始 crossAxisAlignment:中心 renderObject: RenderFlex#1a73f 需要-布局需要-油漆需要-合成-位更新 : SingleChildScrollView 依赖项:[PrimaryScrollController] : 材料应用 状态:_MaterialAppState#7f306 : 主页 : _InheritedGraphQLProvider : GraphQLProvider 状态:_GraphQLProviderState#bab20 : 我的应用 ... 相关的导致错误的小部件是: TextField TextField:file:///G:/%D8%B3%D9%88%D8%B1%D8%B3%20%D9%87%D8%A7%DB%8C%20%D9%81%D9% 84%D8%A7%D8%AA%D8%B1/mutation_gql/lib/main.dart:62:25`

谁能帮帮我?

【问题讨论】:

将您的列包装在 Material 小部件或 Scaffold 【参考方案1】:

您应该使用ScaffoldMaterial

 @override
  Widget build(BuildContext context) 
    return MaterialApp(
      home: Scaffold(
        body: SingleChildScrollView(
      
            child: Column(
              children: [
                Mutation(
                  options: MutationOptions(
                    document: gql(createUser),
      
                  ),
      
                  builder:(
                      RunMutation insert,
                      QueryResult? result,
                      )
                    return
                      Column(
                        children: [
                          TextField(
                            decoration:  InputDecoration(hintText: "Name"),
                            controller: nameController,
                          ),
                          TextField(
                            decoration:  InputDecoration(hintText: "Email"),
                            controller: emailController,
      
                          ),
                          TextField(
                            decoration:  InputDecoration(hintText: "Password"),
                            controller: passwordController,
      
                          ),
                          RaisedButton(
                              child: Text("Submit"),
                              onPressed:()
                                insert(<String, dynamic>
                                  "Email": emailController.text,
                                  "Name" : nameController.text,
                                  // "Password" : passwordController.text,
                                );
                              ),
                          Text("Result : \n $result!.data?.toString()",),
                        ],
                      );
      
                  ,
      
                ),
              ],
            ),
      
        ),
      ),
    );
  

【讨论】:

以上是关于颤振未找到材料小部件的主要内容,如果未能解决你的问题,请参考以下文章

未找到材质小部件

我调用的小部件未显示在颤振列中

颤振小部件不显示

所有小部件的颤振填充?

颤振小部件测试 - 如何执行“返回上一个屏幕”的测试

颤振图标小部件在 vscode 中没有预览