一个安卓风格的flutter windows程序对话框

点击主窗口+号按钮,打开新窗口,新窗口完全覆盖原主窗口,点击新窗口的对勾号按钮,关闭新窗口返回主窗口,主窗口显示打开窗口编辑框中编辑的数据。

import 'package:flutter/material.dart';
//import 'package:path_provider/path_provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? edit1Text;
  String? edit2Text;

  void showDialog() async {
    final result = await Navigator.push(
      context,
      MaterialPageRoute(builder: (context) => DialogPage()),
    );
    if (result != null) {
      setState(() {
        edit1Text = result[0];
        edit2Text = result[1];
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            if (edit1Text != null) Text('Edit 1: $edit1Text'),
            if (edit2Text != null) Text('Edit 2: $edit2Text'),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: showDialog,
        tooltip: 'Open Dialog',
        child: Icon(Icons.add),
      ),
    );
  }
}

class DialogPage extends StatefulWidget {
  @override
  _DialogPageState createState() => _DialogPageState();
}

class _DialogPageState extends State<DialogPage> {
  TextEditingController controller1 = TextEditingController();
  TextEditingController controller2 = TextEditingController();

  //Future<List<String>>? _future;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Dialog Page'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: controller1,
              decoration: InputDecoration(labelText: 'Edit 1'),
            ),
            TextField(
              controller: controller2,
              decoration: InputDecoration(labelText: 'Edit 2'),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.pop(context, [
            controller1.text,
            controller2.text,
          ]);
        },
        tooltip: 'Confirm',
        child: Icon(Icons.check),
      ),
    );
  }
}

以下是对这段代码的分析:

一、整体结构
这段代码是一个使用 Flutter 框架构建的应用程序。主要包括以下几个部分:

导入必要的包:
import ‘package:flutter/material.dart’;,引入了 Flutter 的基础组件库。
main函数:作为应用程序的入口点,调用runApp函数启动应用,并传入MyApp实例。

MyApp类:
继承自StatelessWidget,用于定义应用的整体结构和主题。
MyHomePage类:继承自StatefulWidget,包含应用的主页面逻辑和状态管理。

_MyHomePageState类:
与MyHomePage相关联的状态类,负责处理主页面的交互和状态更新。
DialogPage类:继承自StatefulWidget,用于显示对话框页面。

_DialogPageState类:
与DialogPage相关联的状态类,负责处理对话框页面的交互。

二、功能描述

应用启动:
在main函数中,调用runApp(MyApp())启动应用,显示MyApp定义的界面。

MyApp类:
build方法返回一个MaterialApp实例,设置了应用的标题为 ‘Flutter Demo’, 主题颜色为蓝色(通过primarySwatch: Colors.blue),并指定了应用的首页为MyHomePage。

MyHomePage类和_MyHomePageState类:
MyHomePage是一个有状态的小部件,它的状态由_MyHomePageState管理。

状态变量:
edit1Text和edit2Text用于存储用户在对话框中输入的文本。

showDialog方法:
使用Navigator.push将用户导航到DialogPage。
当DialogPage返回结果时,如果结果不为空,通过setState更新edit1Text和edit2Text的值。

build方法:
返回一个Scaffold,包含应用栏(AppBar)、页面主体内容(body)和一个悬浮按钮(FloatingActionButton)。
主体内容是一个居中的列(Column),如果edit1Text和edit2Text不为空,则分别显示对应的文本。
悬浮按钮用于触发showDialog方法,打开对话框。

DialogPage类和_DialogPageState类:
DialogPage是一个有状态的小部件,它的状态由_DialogPageState管理。

状态变量:
controller1和controller2是两个TextEditingController,分别用于控制两个TextField的文本输入。

build方法:
返回一个Scaffold,包含应用栏(AppBar)、页面主体内容(body)和一个悬浮按钮(FloatingActionButton)。
主体内容是一个填充了 16 像素边距的列(Column),包含两个TextField, 分别由controller1和controller2控制,并带有相应的标签。
悬浮按钮用于确认输入,点击时将controller1.text和controller2.text作为列表返回,并使用Navigator.pop关闭对话框页面。

三、总结
这段代码实现了一个简单的 Flutter 应用,包含一个主页面和一个对话框页面。用户可以在主页面通过点击悬浮按钮打开对话框,在对话框中输入两个文本,然后点击确认按钮将输入的文本返回到主页面并显示。通过状态管理和页面导航,实现了数据的输入和展示功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值