// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; /// Flutter code sample for [AlertDialog]. void main() => runApp(const AdaptiveAlertDialogApp()); class AdaptiveAlertDialogApp extends StatelessWidget { const AdaptiveAlertDialogApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( // Try this: set the platform to TargetPlatform.android and see the difference theme: ThemeData(platform: TargetPlatform.iOS, useMaterial3: true), home: Scaffold( appBar: AppBar(title: const Text('AlertDialog Sample')), body: const Center( child: AdaptiveDialogExample(), ), ), ); } } class AdaptiveDialogExample extends StatelessWidget { const AdaptiveDialogExample({super.key}); Widget adaptiveAction({ required BuildContext context, required VoidCallback onPressed, required Widget child }) { final ThemeData theme = Theme.of(context); switch (theme.platform) { case TargetPlatform.android: case TargetPlatform.fuchsia: case TargetPlatform.linux: case TargetPlatform.windows: return TextButton(onPressed: onPressed, child: child); case TargetPlatform.iOS: case TargetPlatform.macOS: return CupertinoDialogAction(onPressed: onPressed, child: child); } } @override Widget build(BuildContext context) { return TextButton( onPressed: () => showAdaptiveDialog( context: context, builder: (BuildContext context) => AlertDialog.adaptive( title: const Text('AlertDialog Title'), content: const Text('AlertDialog description'), actions: [ adaptiveAction( context: context, onPressed: () => Navigator.pop(context, 'Cancel'), child: const Text('Cancel'), ), adaptiveAction( context: context, onPressed: () => Navigator.pop(context, 'OK'), child: const Text('OK'), ), ], ), ), child: const Text('Show Dialog'), ); } }