Flutter 如何在flatter中将一些功能转换为独立的小部件?
我需要将这两个函数变成一个小部件:_collectKeywords和_matchKeywords,这样我就可以再次使用它们。我已经试过了,但我不知道如何以及在哪里安装一个只处理数据而不返回任何值的小部件。有人能帮我吗? //请不要介意UI、按钮的颜色等Flutter 如何在flatter中将一些功能转换为独立的小部件?,flutter,widget,Flutter,Widget,我需要将这两个函数变成一个小部件:_collectKeywords和_matchKeywords,这样我就可以再次使用它们。我已经试过了,但我不知道如何以及在哪里安装一个只处理数据而不返回任何值的小部件。有人能帮我吗? //请不要介意UI、按钮的颜色等 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:fluttermatchcard/cardButto
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:fluttermatchcard/cardButton.dart';
class MainMenu extends StatelessWidget {
void _accessCardMatcher(String butKeyword)
{
_collectKeywords(butKeyword);
}
//================================================
String _keyword_1;
String _keyword_2;
void _collectKeywords(String _keyword_now){
if(_keyword_1==null)
{
_keyword_1=_keyword_now;
}
else{
_keyword_2=_keyword_now;
_matchKeyword(_keyword_1,_keyword_2);
}
}
void _matchKeyword(_keyWord_one, _keyWord_two){
if(_keyWord_one==_keyWord_two){
//Lock the But
print("MATCH!!!!");
}
_keyword_1=null;
_keyword_1=null;
}
//================================================
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
//textBaseline: ,
children: <Widget>[
Container(
child: Text("Match Card", style: TextStyle(
fontSize: 50,
color: Colors.amber,
fontFamily: "FreeHand"
),
),
),
Icon( Icons.filter_none,
color: Colors.amber,
size: 40,
),
SizedBox(
height: 30,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
//But Start
CardButton(
onTapExecute:_accessCardMatcher,
keyword: "start",
text: Text("STA", style: TextStyle(
fontSize: 20,
),),
alignment: Alignment.centerRight,
),
//But Start2
CardButton(
onTapExecute:_accessCardMatcher,
keyword: "start",
text: Text("RT", style: TextStyle(
fontSize: 20,
),),
alignment: Alignment.centerLeft,
),
SizedBox(
width: 10,
),
//But Option
CardButton(
onTapExecute:_accessCardMatcher,
keyword: "option",
text: Text("OPT", style: TextStyle(
fontSize: 20,
),),
alignment: Alignment.centerRight,
),
CardButton(
onTapExecute:_accessCardMatcher,
keyword: "option",
text: Text("ION", style: TextStyle(
fontSize: 20,
),),
alignment: Alignment.centerLeft,
),
],
),
SizedBox(
height: 20,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
//But
CardButton(
onTapExecute:_accessCardMatcher,
keyword: "credit",
text: Text("CRE", style: TextStyle(
fontSize: 20,
),),
alignment: Alignment.centerRight,
),
CardButton(
onTapExecute:_accessCardMatcher,
keyword: "credit",
text: Text("DIT", style: TextStyle(
fontSize: 20,
),),
alignment: Alignment.centerLeft,
),
],
)
],
)
);
}
}
import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
导入“包装:卡片/卡片按钮.省道”;
类MainMenu扩展了无状态小部件{
void\u accessCardMatcher(字符串关键字)
{
_收集关键词(butKeyword);
}
//================================================
字符串_关键字_1;
字符串_关键字_2;
void\u收集关键字(字符串\u关键字\u现在){
如果(_关键字_1==null)
{
_关键字_1=_关键字_现在;
}
否则{
_关键字2=\u关键字\u现在;
_匹配关键字(_关键字_1,_关键字_2);
}
}
无效匹配关键字(\u关键字\u一、\u关键字\u二){
如果(\u关键字\u一==\u关键字\u二){
//锁上
打印(“匹配!!!!”);
}
_关键词_1=null;
_关键词_1=null;
}
//================================================
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.white,
正文:专栏(
mainAxisAlignment:mainAxisAlignment.center,
//text基线:,
儿童:[
容器(
子项:文本(“匹配卡”),样式:TextStyle(
尺寸:50,
颜色:颜色。琥珀色,
fontFamily:“写意”
),
),
),
图标(Icons.filter\u无,
颜色:颜色。琥珀色,
尺码:40,
),
大小盒子(
身高:30,
),
划船(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
//但是开始
卡片按钮(
onTapExecute:\u accessCardMatcher,
关键词:“开始”,
文本:文本(“STA”),样式:文本样式(
尺寸:20,
),),
对齐:alignment.centerRight,
),
//但是开始2
卡片按钮(
onTapExecute:\u accessCardMatcher,
关键词:“开始”,
文本:文本(“RT”),样式:文本样式(
尺寸:20,
),),
对齐:alignment.centerLeft,
),
大小盒子(
宽度:10,
),
//但选择权
卡片按钮(
onTapExecute:\u accessCardMatcher,
关键词:“选项”,
文本:文本(“选择”),样式:文本样式(
尺寸:20,
),),
对齐:alignment.centerRight,
),
卡片按钮(
onTapExecute:\u accessCardMatcher,
关键词:“选项”,
文本:文本(“离子”,样式:文本样式(
尺寸:20,
),),
对齐:alignment.centerLeft,
),
],
),
大小盒子(
身高:20,
),
划船(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
//但是
卡片按钮(
onTapExecute:\u accessCardMatcher,
关键词:“信用”,
text:text(“CRE”),style:TextStyle(
尺寸:20,
),),
对齐:alignment.centerRight,
),
卡片按钮(
onTapExecute:\u accessCardMatcher,
关键词:“信用”,
文本:文本(“DIT”),样式:文本样式(
尺寸:20,
),),
对齐:alignment.centerLeft,
),
],
)
],
)
);
}
}
这是一个示例,根据您的要求进行修改
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
int buttonCount = 0;
String textYouWantToModify = '';
TextEditingController te;
CommonMethods methods = CommonMethods();
@override
void initState() {
super.initState();
te = TextEditingController();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(title: Text('Title')),
body: Container(
child: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
//Other widgets like TextFiled to save text......or whatever
TextField(
controller: te,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Type something 1',
labelStyle: TextStyle(color: Colors.black)),
style: TextStyle(color: Colors.black)
),
RaisedButton(
color: Colors.black,
onPressed: () {
setState(() {
buttonCount++;
if (buttonCount == 2) {
methods.method1(te.text);
methods.method2();
}
});
},
child:
Text('Button 1', style: TextStyle(color: Colors.white))),
RaisedButton(
onPressed: () {
setState(() {
buttonCount++;
if (buttonCount == 2) {
methods.method1(te.text);
methods.method2();
}
});
},
child:
Text('Button 2', style: TextStyle(color: Colors.black))),
//Other widgets.....
]))));
}
}
class CommonMethods {
void method1(String s) {
//your code.....
print(s);
}
void method2() {
//your code.....
}
}
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
int buttonCount=0;
字符串textYouWantToModify='';
文本编辑控制器;
CommonMethods=CommonMethods();
@凌驾
void initState(){
super.initState();
te=文本编辑控制器();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.white,
appBar:appBar(标题:文本('title')),
主体:容器(
儿童:中心(
子:列(
mainAxisSize:mainAxisSize.min,
mainAxisAlignment:mainAxisAlignment.spaceAround,
儿童:[
//其他小部件,如TextField,用于保存文本……或其他任何内容
文本字段(
控制员:te,,
装饰:输入装饰(
边框:OutlineInputBorder(),
labelText:“键入某物1”,
labelStyle:TextStyle(颜色:Colors.black)),
样式:TextStyle(颜色:Colors.black)
),
升起的按钮(
颜色:颜色,黑色,
已按下:(){
设置状态(){
按钮计数++;
如果(buttonCount==2){
方法:方法1(文本);
方法:方法2();
}
});
},
儿童:
Text('按钮1',样式:Text样式(颜色:Colors.white)),
升起的按钮(
已按下:(){
设置状态(){
按钮计数++;
如果(buttonCount==2){
方法:方法1(文本);
方法:方法2();
}
});
},
儿童:
文本('按钮2',样式:文本样式(颜色:Colors.black)),