Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何扩展我的主页_Dart_Flutter - Fatal编程技术网

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类的一部分,它引用了该类,因此您需要用有状态小部件包装它