当前位置: 首页 > news >正文

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设置统一风格
  • 需要平台差异时使用条件判断
  • 对话框等交互元素使用平台适配的显示方式

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

http://www.cnnetsun.cn/news/560587.html

相关文章:

  • 手把手教你用Pspice仿真Boost变换器(新手教程)
  • 工业电机驱动中的电源管理技术:核心要点解读
  • USB_Burning_Tool批量模式下固件一致性保障方案
  • Altera USB-Blaster无法连接?一文说清驱动安装核心要点
  • 高频信号抖动问题在PCB绘制中的规避方法
  • ResNet18应用教程:社交媒体图像自动标注
  • ResNet18部署实战:Flask WebUI集成详细步骤
  • 工业高温环境下蜂鸣器驱动电路稳定性研究
  • ResNet18应用案例:零售货架商品识别系统部署
  • 微软UserLM-8b:让AI精准模拟用户对话的新突破
  • ResNet18优化实战:内存与速度的平衡策略
  • 核心要点:在线电路仿真对实验安全性的影响分析
  • ResNet18实战:构建多场景物体识别系统
  • ResNet18环境部署:极速CPU推理配置完整指南
  • BFS-Prover:7B模型如何突破72.95%定理证明难关
  • ResNet18技术详解:Top-3置信度实现原理
  • ResNet18部署案例:智能家居控制系统
  • 完整示例:构建支持100G以太网的高速PCB通道设计
  • Altera USB-Blaster驱动安装图解说明(工控版)
  • 工业电机控制算法部署:Vitis实战操作指南
  • ResNet18实战:食品质量检测系统搭建
  • ResNet18部署实战:GCP云服务配置
  • Pspice仿真Flyback变压器饱和问题图解说明
  • ResNet18性能测试:不同分辨率影响
  • ResNet18应用解析:医疗影像辅助诊断系统
  • ResNet18应用教程:智能家居中的物体识别
  • ResNet18部署案例:医疗影像辅助诊断系统
  • HBuilderX安装教程(Windows):一文说清所有流程
  • Xilinx Zynq平台下OpenAMP调试技巧实战分享
  • ResNet18实战:安防监控智能分析系统