在 flutter 中可重用 类
reusable classes in flutter
我有一个如下所示的页面。这个页面有两个按钮。其中之一是将表格发送到相关地点。在我的情况下给导师。不过,这个暂时不重要。第二个按钮很重要。无论如何,第二个是将表格保存为草稿。所以,我知道我需要在 SQLite 中保存输入的数据。然后当 he/she 想再次编辑表格时,我需要从 SQLite 中提取数据然后填写相关的地方。这是问题。当我点击编辑按钮时。下面的页面将显示之前填写的内容。但是,对于此任务,为编辑按钮再次编写下面的屏幕代码是没有意义的。所以我需要重用下面的页面。我该怎么做?任何的想法。有什么有用的内容吗?请附上link、视频等,没关系。我只是想学习如何去做。我希望我能解释一下情况。如果需要更多信息以了解情况,请随时提出要求。
如果您将页面放在这样的小部件中
class MyPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
body: // your page here
)
}
}
您可以在不同的位置打开它。
_onButton1Click(BuildContext context){
// do something button 1 specific
final route = MaterialPageRoute(builder: (context) => MyPage());
Navigator.of(context).push(route);
}
_onButton2Click(BuildContext context){
// do something button 2 specific
final route = MaterialPageRoute(builder: (context) => MyPage());
Navigator.of(context).push(route);
}
有多种方法可以满足您的需求。但基本上,您需要检查是否有保存的数据?如果有保存的数据则显示它,否则显示一个空白页面。简单示例:
class MyPageData {
String firstField;
String secondField;
// ... fields with page info
}
class MyFormPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MyForPageState();
}
class _MyForPageState extends State<MyFormPage>{
MyPageData _savedData;
@override
void initState() {
super.initState();
_savedData = loadDataFromDb();
}
@override
Widget build(BuildContext context) {
String myFirstField = "";
String mySecondField = "";
// other fields
if (_savedData != null){
myFirstField = _savedData.firstField;
mySecondField = _savedData.secondField;
// other fields
}
// render page with fields values above
}
}
这里MyPageData
是您页面上所有数据的模型。所以它更容易使用。此外,此数据将保存到 db 并在将来从 db 恢复。
MyFormPage
是表单页面的有状态小部件。有一个 loadDataFromDb
方法用于加载保存的数据。然后在构建方法中,我们检查是否有保存的数据。如果有数据,我们会为页面上的所有字段填充初始值,并将这些字段用作构建页面的小部件的初始值。因此,如果没有保存数据,那么 _savedData
将是 null
,并且所有小部件都将具有空的初始值。
我有一个如下所示的页面。这个页面有两个按钮。其中之一是将表格发送到相关地点。在我的情况下给导师。不过,这个暂时不重要。第二个按钮很重要。无论如何,第二个是将表格保存为草稿。所以,我知道我需要在 SQLite 中保存输入的数据。然后当 he/she 想再次编辑表格时,我需要从 SQLite 中提取数据然后填写相关的地方。这是问题。当我点击编辑按钮时。下面的页面将显示之前填写的内容。但是,对于此任务,为编辑按钮再次编写下面的屏幕代码是没有意义的。所以我需要重用下面的页面。我该怎么做?任何的想法。有什么有用的内容吗?请附上link、视频等,没关系。我只是想学习如何去做。我希望我能解释一下情况。如果需要更多信息以了解情况,请随时提出要求。
如果您将页面放在这样的小部件中
class MyPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
body: // your page here
)
}
}
您可以在不同的位置打开它。
_onButton1Click(BuildContext context){
// do something button 1 specific
final route = MaterialPageRoute(builder: (context) => MyPage());
Navigator.of(context).push(route);
}
_onButton2Click(BuildContext context){
// do something button 2 specific
final route = MaterialPageRoute(builder: (context) => MyPage());
Navigator.of(context).push(route);
}
有多种方法可以满足您的需求。但基本上,您需要检查是否有保存的数据?如果有保存的数据则显示它,否则显示一个空白页面。简单示例:
class MyPageData {
String firstField;
String secondField;
// ... fields with page info
}
class MyFormPage extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MyForPageState();
}
class _MyForPageState extends State<MyFormPage>{
MyPageData _savedData;
@override
void initState() {
super.initState();
_savedData = loadDataFromDb();
}
@override
Widget build(BuildContext context) {
String myFirstField = "";
String mySecondField = "";
// other fields
if (_savedData != null){
myFirstField = _savedData.firstField;
mySecondField = _savedData.secondField;
// other fields
}
// render page with fields values above
}
}
这里MyPageData
是您页面上所有数据的模型。所以它更容易使用。此外,此数据将保存到 db 并在将来从 db 恢复。
MyFormPage
是表单页面的有状态小部件。有一个 loadDataFromDb
方法用于加载保存的数据。然后在构建方法中,我们检查是否有保存的数据。如果有数据,我们会为页面上的所有字段填充初始值,并将这些字段用作构建页面的小部件的初始值。因此,如果没有保存数据,那么 _savedData
将是 null
,并且所有小部件都将具有空的初始值。