news 2026/4/30 4:18:16

Flutter 跨平台开发:iOS+Android 统一界面实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter 跨平台开发:iOS+Android 统一界面实战

以下是一个Flutter跨平台开发的实战代码示例,实现iOS和Android平台的统一界面,包含常见功能模块:

基础页面结构

import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: '跨平台Demo', theme: ThemeData( primarySwatch: Colors.blue, platform: TargetPlatform.android, // 统一风格 ), home: HomePage(), ); } }

https://www.zhihu.com/zvideo/1993917521993163890/
https://www.zhihu.com/zvideo/1993917521993163890
https://www.zhihu.com/zvideo/1993917519015208176/
https://www.zhihu.com/zvideo/1993917519015208176
https://www.zhihu.com/zvideo/1993917513231263678/
https://www.zhihu.com/zvideo/1993917513231263678
https://www.zhihu.com/zvideo/1993917503869576945/
https://www.zhihu.com/zvideo/1993917503869576945
https://www.zhihu.com/zvideo/1993917503974437411/
https://www.zhihu.com/zvideo/1993917503974437411
https://www.zhihu.com/zvideo/1993917500845491665/
https://www.zhihu.com/zvideo/1993917500845491665
https://www.zhihu.com/zvideo/1993917501038412887/
https://www.zhihu.com/zvideo/1993917501038412887
https://www.zhihu.com/zvideo/1993917492914042769/
https://www.zhihu.com/zvideo/1993917492914042769
https://www.zhihu.com/zvideo/1993917492574310874/
https://www.zhihu.com/zvideo/1993917492574310874
https://www.zhihu.com/zvideo/1993917467110691807/
https://www.zhihu.com/zvideo/1993917467110691807
https://www.zhihu.com/zvideo/1993917459183449347/
https://www.zhihu.com/zvideo/1993917459183449347

统一界面组件

class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { int _counter = 0; final TextEditingController _controller = TextEditingController(); void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('统一界面'), actions: [ IconButton( icon: Icon(Icons.settings), onPressed: () { Navigator.push( context, MaterialPageRoute(builder: (context) => SettingsPage()), ); }, ), ], ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ TextField( controller: _controller, decoration: InputDecoration( labelText: '输入内容', border: OutlineInputBorder(), ), ), SizedBox(height: 20), Text( '点击次数: $_counter', style: Theme.of(context).textTheme.headline6, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, child: Icon(Icons.add), ), ); } }

平台适配对话框

class SettingsPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('设置'), ), body: ListView( children: [ ListTile( title: Text('主题设置'), onTap: () => _showThemeDialog(context), ), ListTile( title: Text('关于'), onTap: () => _showAboutDialog(context), ), ], ), ); } void _showThemeDialog(BuildContext context) { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( title: Text('选择主题'), content: SingleChildScrollView( child: Column( children: [ _buildThemeOption(context, '浅色', ThemeMode.light), _buildThemeOption(context, '深色', ThemeMode.dark), _buildThemeOption(context, '系统默认', ThemeMode.system), ], ), ), ); }, ); } Widget _buildThemeOption( BuildContext context, String text, ThemeMode mode) { return ListTile( title: Text(text), onTap: () { // 实现主题切换逻辑 Navigator.pop(context); }, ); } void _showAboutDialog(BuildContext context) { showAboutDialog( context: context, applicationName: '统一界面Demo', applicationVersion: '1.0.0', ); } }

平台特定适配

// 在需要区分平台的地方使用以下判断 if (Theme.of(context).platform == TargetPlatform.iOS) { // iOS特定样式或行为 } else if (Theme.of(context).platform == TargetPlatform.android) { // Android特定样式或行为 }

注意事项

  • 使用Material组件库确保基础组件在双平台表现一致
  • 通过ThemeData.platform设置统一风格
  • 需要平台差异时使用条件判断
  • 对话框等交互元素使用平台适配的显示方式

这段代码实现了基础页面结构、统一界面组件、平台适配对话框等功能模块,可以直接作为项目模板使用。根据实际需求可以扩展更多功能组件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:56:21

Vulkan--概述

目录 Vulkan 的起源 绘制一个三角形需要做什么 步骤 1 - 实例与物理设备选择 步骤 2 - 逻辑设备与队列族 步骤 3 - 窗口表面与交换链 步骤 4 - 图像视图与帧缓冲 步骤 5 - 渲染通道 步骤 6 - 图形管线 步骤 7 - 命令池与命令缓冲区 步骤 8 - 主循环 总结 API 概念 …

作者头像 李华
网站建设 2026/4/27 3:09:35

ResNet18实战案例:服装品类识别系统部署

ResNet18实战案例&#xff1a;服装品类识别系统部署 1. 引言&#xff1a;通用物体识别与ResNet-18的工程价值 在计算机视觉领域&#xff0c;通用物体识别是智能系统理解现实世界的第一步。从商品分类到内容审核&#xff0c;从智能相册到AR交互&#xff0c;精准、高效的图像分…

作者头像 李华
网站建设 2026/4/30 2:45:19

PCB电镀+蚀刻工艺简介:快速理解全流程

深入理解PCB电镀蚀刻&#xff1a;从原理到实战的全流程拆解你有没有想过&#xff0c;一块小小的手机主板上&#xff0c;密密麻麻的线路是如何做到比头发丝还细却依然稳定导通的&#xff1f;这背后离不开一个关键组合工艺——电镀 蚀刻。在现代高密度PCB制造中&#xff0c;尤其…

作者头像 李华
网站建设 2026/4/27 10:29:22

ResNet18实战:构建高精度图像分类服务

ResNet18实战&#xff1a;构建高精度图像分类服务 1. 引言&#xff1a;通用物体识别中的ResNet-18价值 在计算机视觉领域&#xff0c;通用物体识别是智能系统理解现实世界的基础能力。从自动驾驶感知环境&#xff0c;到智能家居识别用户行为&#xff0c;再到内容平台自动打标…

作者头像 李华
网站建设 2026/4/28 17:38:39

CubeAxesActor 为几何体添加边框和坐标轴

一&#xff1a;主要的知识点 1、说明 本文只是教程内容的一小段&#xff0c;因博客字数限制&#xff0c;故进行拆分。主教程链接&#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①vtkCubeAxesActor立方体坐标轴 二&#x…

作者头像 李华
网站建设 2026/4/27 17:56:15

多层板PCB生产流程实例分析:常见缺陷及改善措施

多层板PCB生产全流程实战解析&#xff1a;从缺陷溯源到工艺优化你有没有遇到过这样的情况&#xff1f;一块设计完美的16层服务器主板&#xff0c;在回流焊后突然出现间歇性通信故障。FA&#xff08;失效分析&#xff09;拆解发现&#xff0c;问题竟出在第8层一个不起眼的微孔—…

作者头像 李华