snapshot of https://github.com/flutter/samples.git (main, 2026-09-16; blobs > 131072B omitted)
Some checks failed
Main Branch CI / Test Flutter beta on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter stable on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter beta on macos-latest (push) Has been cancelled
Main Branch CI / Test Flutter stable on macos-latest (push) Has been cancelled
Some checks failed
Main Branch CI / Test Flutter beta on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter stable on ubuntu-latest (push) Has been skipped
Main Branch CI / Test Flutter beta on macos-latest (push) Has been cancelled
Main Branch CI / Test Flutter stable on macos-latest (push) Has been cancelled
This commit is contained in:
127
desktop_photo_search/material/lib/main.dart
Normal file
127
desktop_photo_search/material/lib/main.dart
Normal file
@@ -0,0 +1,127 @@
|
||||
// Copyright 2019 The Flutter team. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:menubar/menubar.dart' as menubar;
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import 'src/model/photo_search_model.dart';
|
||||
import 'src/unsplash/unsplash.dart';
|
||||
import 'src/widgets/photo_search_dialog.dart';
|
||||
import 'src/widgets/policy_dialog.dart';
|
||||
import 'src/widgets/unsplash_notice.dart';
|
||||
import 'src/widgets/unsplash_search_content.dart';
|
||||
import 'unsplash_access_key.dart';
|
||||
|
||||
void main() {
|
||||
Logger.root.level = Level.ALL;
|
||||
Logger.root.onRecord.listen((rec) {
|
||||
// ignore: avoid_print
|
||||
print(
|
||||
'${rec.loggerName} ${rec.level.name}: ${rec.time}: ${rec.message}',
|
||||
);
|
||||
});
|
||||
|
||||
if (unsplashAccessKey.isEmpty) {
|
||||
Logger('main').severe(
|
||||
'Unsplash Access Key is required. '
|
||||
'Please add to `lib/unsplash_access_key.dart`.',
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
runApp(
|
||||
ChangeNotifierProvider<PhotoSearchModel>(
|
||||
create: (context) =>
|
||||
PhotoSearchModel(Unsplash(accessKey: unsplashAccessKey)),
|
||||
child: const UnsplashSearchApp(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
class UnsplashSearchApp extends StatelessWidget {
|
||||
const UnsplashSearchApp({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
title: 'Photo Search',
|
||||
theme: ThemeData(colorSchemeSeed: Colors.orange),
|
||||
home: const UnsplashHomePage(title: 'Photo Search'),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class UnsplashHomePage extends StatelessWidget {
|
||||
const UnsplashHomePage({required this.title, super.key});
|
||||
final String title;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final photoSearchModel = Provider.of<PhotoSearchModel>(context);
|
||||
menubar.setApplicationMenu([
|
||||
menubar.NativeSubmenu(
|
||||
label: 'Search',
|
||||
children: [
|
||||
menubar.NativeMenuItem(
|
||||
label: 'Search…',
|
||||
onSelected: () {
|
||||
showDialog<void>(
|
||||
context: context,
|
||||
builder: (context) => PhotoSearchDialog(
|
||||
callback: photoSearchModel.addSearch,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
if (!Platform.isMacOS)
|
||||
menubar.NativeMenuItem(
|
||||
label: 'Quit',
|
||||
onSelected: () {
|
||||
SystemNavigator.pop();
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
menubar.NativeSubmenu(
|
||||
label: 'About',
|
||||
children: [
|
||||
menubar.NativeMenuItem(
|
||||
label: 'About',
|
||||
onSelected: () {
|
||||
showDialog<void>(
|
||||
context: context,
|
||||
builder: (context) => const PolicyDialog(),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
]);
|
||||
|
||||
return UnsplashNotice(
|
||||
child: Scaffold(
|
||||
appBar: AppBar(title: Text(title)),
|
||||
body: photoSearchModel.entries.isNotEmpty
|
||||
? const UnsplashSearchContent()
|
||||
: const Center(
|
||||
child: Text('Search for Photos using the Fab button'),
|
||||
),
|
||||
floatingActionButton: FloatingActionButton(
|
||||
onPressed: () => showDialog<void>(
|
||||
context: context,
|
||||
builder: (context) =>
|
||||
PhotoSearchDialog(callback: photoSearchModel.addSearch),
|
||||
),
|
||||
tooltip: 'Search for a photo',
|
||||
child: const Icon(Icons.search),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user