IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter控件及页面介绍 -> 正文阅读

[移动开发]Flutter控件及页面介绍


Flutter是跨平台的 UI框架,主要解决的就是界面的跨平台。
一切显示都是 widget,widget是所有控件的基础。
Flutter每个页面都是一帧。

无状态控件(StatelessWidget)

控件保持在这一帧。
继承StatelessWidget,在buiold方法内返回一个嵌套好的布局渲染。

有状态控件(StatefulWidget)

控件数据更新,构建新的widget。

State 实现了数据的跨帧保存和恢复。
**setState({})**方法触发界面更新
**{}**中就是要改变的数据
示例可以参考新建Flutter项目默认的计时器项目,截取了部分代码如下:


class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);
  
  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
  	//界面刷新时触发修改的数据。计时器加1
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ), 
    );
  }
}

控件State生命周期

在这里插入图片描述

常用控件

Flutter中有30多种内置的控件和布局,而且很多控件的职责其实非常单一。

container

container是最常用的布局,是由其他好几个默认的widget组成的模板。
支持padding,margin,color,width,height等属性。

Padding

用来设置padding的控件。职责非常单一。
同类的还有Center(设置居中),Align等(可参考后续配图)。

Column和Row

最常见的横竖布局。

常用控件

分类图待补充

页面

除了上面描述的常用的控件之外,Flutter还有用于交互显示的Widget。如MaterialApp(App顶层主页入口),Scaffold(用于承载一般用户界面,脚手架),Appbar,Text,Image等。

路由跳转(Navigator)

命名路由跳转

通过MaterialApp的routes参数配置路由表

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      //home对应的其实就是路由为“/”的页面
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
      routes: {
        "home":(context){
          return HomePage();
        }
      },
    );
  }
}

//跳转方式
Navigator.pushNamed(context, "/home");
//跳转携带参数
Navigator.pushNamed(context, "/home", arguments: <String, String>{
	"date":"20220504",
},);
//跳转新页面并替换新页面
Navigator.pushReplacementNamed(context, "/home");
//跳转新页面,并关闭指定路由之前的所有页面
Navigator.pushNamedAndRemoveUntil(context, "/home",ModalRoute.withName("/"));

直接使用Route跳转

需要手动构建Route参数信息,然后交给Navigator实现调整

Navigator.push(context, MaterialPageRoute(builder: (context) => NotifyPage()));

使用onGenerateRoute跳转

利用onGenerateRoute方法在MateriaApp中增加特殊定制处理的路由跳转。

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
      onGenerateRoute: (RouteSettings settings){
        WidgetBuilder builder;
        switch(settings.name){
          case "signup/personal_info":
            builder = (BuildContext _) => CollectPersonalInfoPage();
            break;
          case "signup/choose_credentials":
            builder = (BuildContext _) => ChooseCredentialsPage();
            return CupertinoPageRoute(builder: builder,settings: settings);
          default:
            throw Exception("invalid route");
        }
        return MaterialPageRoute(builder: builder,settings: settings);
      },
    );
  }
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:18:35  更:2022-05-07 11:19:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 11:56:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码