颤振未找到材料小部件
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
谁能帮帮我?
【问题讨论】:
将您的列包装在Material
小部件或 Scaffold
。
【参考方案1】:
您应该使用Scaffold
或Material
:
@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()",),
],
);
,
),
],
),
),
),
);
【讨论】:
以上是关于颤振未找到材料小部件的主要内容,如果未能解决你的问题,请参考以下文章