Dart 如何扩展我的主页
在我的应用程序中,我有以下代码:Dart 如何扩展我的主页,dart,flutter,Dart,Flutter,在我的应用程序中,我有以下代码: class _MyHomePageState extends State<MyHomePage> { int _selected = 0; List<Widget> makeRadios() { List <Widget> list = new List <Widget>(); list.add(new Row( children: <Widget>[ new Ra
class _MyHomePageState extends State<MyHomePage> {
int _selected = 0;
List<Widget> makeRadios() {
List <Widget> list = new List <Widget>();
list.add(new Row(
children: <Widget>[
new Radio(value: 0, groupValue: _selected,
onChanged: (int value) {
rOnChanged(value);
}),
new Text('Radio 0'),
],
));
list.add(new Row(
children: <Widget>[
new Radio(value: 1, groupValue: _selected,
onChanged: (int value) {
rOnChanged(value);
}),
new Text('Radio 1'),
],
));
return list;
};
void rOnChanged(int value){
this.setState(() {
_selected = value;
});
print("value: $value");
this._bodyHeight = (value == 1) ? 65.0 : 0.0;
}
// and lots more lines
}
另一个文件为:
part of myLib;
int _selected = 0;
List<Widget> makeRadios() {
List <Widget> list = new List <Widget>();
list.add(new Row(
children: <Widget>[
new Radio(value: 0, groupValue: _selected,
onChanged: (int value) {
rOnChanged(value);
}),
new Text('Radio 0'),
],
));
list.add(new Row(
children: <Widget>[
new Radio(value: 1, groupValue: _selected,
onChanged: (int value) {
rOnChanged(value);
}),
new Text('Radio 1'),
],
));
return list;
};
void rOnChanged(int value){
this.setState(() {
_selected = value;
});
print("value: $value");
this._bodyHeight = (value == 1) ? 65.0 : 0.0;
}
myLib的一部分;
int _selected=0;
列表makeRadios(){
列表=新列表();
列表。添加(新行)(
儿童:[
新收音机(值:0,组值:\已选定,
onChanged:(int值){
改变(价值);
}),
新文本(“收音机0”),
],
));
列表。添加(新行)(
儿童:[
新收音机(值:1,组值:\已选定,
onChanged:(int值){
改变(价值);
}),
新文本(“收音机1”),
],
));
退货清单;
};
无效值(int值){
此.setState(){
_所选=值;
});
打印(“值:$value”);
这._车身高度=(值==1)?65.0:0.0;
}
但它不起作用,第二个文件充满了错误
分割/缩放颤振的最佳方法是什么?不要将颤振的
状态
与其状态窗口小部件
分开
如果您想将该小部件提取到它自己的文件中,请完全移动这两个部分
所以你可以
// lib/main.dart
import 'package:flutter/material.dart';
import 'package:myapp/src/myapp.dart';
void main() => runApp(new MyApp());
在lib/src/myapp.dart中
// lib/src/myapp.dart
import 'package:flutter/material.dart';
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return new Container();
}
}
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Switchy extends StatefulWidget{
Switchy({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() => new _SwitchyState();
}
class _SwitchyState extends State<Switchy> {
var _value = true;
void onchange(bool value) {
setState(() {
_value = value;
_savePref(value);
});
}
_savePref(value) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool use = prefs.getBool('use');
await prefs.setBool('use', value);
print('value changed from $use to $value');
}
@override
Widget build(BuildContext context) {
return
new Card(
child: new Container(
child: new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Text("Enable/Disable the app in the background"),
new Switch(value: _value, onChanged: (bool value) => onchange(value)),
],
),
),
);
}
}
//lib/src/myapp.dart
进口“包装:颤振/材料.省道”;
类MyApp扩展了StatefulWidget{
@凌驾
_MyAppState createState()=>new_MyAppState();
}
类MyAppState扩展了状态{
@凌驾
小部件构建(构建上下文){
返回新容器();
}
}
在搜索和阅读给定的答案和评论后,我认为实现可伸缩性的最佳方法是为每个小部件创建单独的文件,包括布局和所有相关功能,然后将其添加到主文件/应用程序中,例如,我编写了下面的代码来绘制开关,读取其值并将其保存在共享首选项中:
文件名widget.dart
// lib/src/myapp.dart
import 'package:flutter/material.dart';
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return new Container();
}
}
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class Switchy extends StatefulWidget{
Switchy({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() => new _SwitchyState();
}
class _SwitchyState extends State<Switchy> {
var _value = true;
void onchange(bool value) {
setState(() {
_value = value;
_savePref(value);
});
}
_savePref(value) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
bool use = prefs.getBool('use');
await prefs.setBool('use', value);
print('value changed from $use to $value');
}
@override
Widget build(BuildContext context) {
return
new Card(
child: new Container(
child: new Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Text("Enable/Disable the app in the background"),
new Switch(value: _value, onChanged: (bool value) => onchange(value)),
],
),
),
);
}
}
在第二个文件中,您导入了材料库吗?@Raouf Rahiche,在Dart中,我们不会多次导入同一个包,对吗?您需要在使用的每个文件中显式导入它it@RaoufRahiche在这两种情况下,“设置状态”仍然显示错误,有“this”或没有。抱歉,我没有注意到setState方法是State类的一部分,它引用了该类,因此您需要用有状态小部件包装它