mirror of
https://github.com/flutter/samples.git
synced 2025-11-08 13:58:47 +00:00
Dart 3.9 / Flutter 3.35 [first LLM release] (#2714)
I got carried away with Gemini and basically rewrote CI and the release process for the new LLM reality. This work was largely completed by Gemini. - Bump all SDK versions to the current beta (3.9.0-0) - Run `flutter channel beta` - Wrote `ci_script.dart` to replace the bash scripts - Converted repository to pub workspace #2499 - Added llm.md and release.md - Added redirect for deprecated Samples Index ## Pre-launch Checklist - [x] I read the [Flutter Style Guide] _recently_, and have followed its advice. - [x] I signed the [CLA]. - [x] I read the [Contributors Guide]. - [x] I have added sample code updates to the [changelog]. - [x] I updated/added relevant documentation (doc comments with `///`).
This commit is contained in:
@@ -65,20 +65,19 @@ class _HomeState extends State<Home> {
|
||||
Widget build(BuildContext context) {
|
||||
final textTheme = Theme.of(context).textTheme;
|
||||
|
||||
final barGroups =
|
||||
hourlySteps
|
||||
.map(
|
||||
(e) => BarChartGroupData(
|
||||
x: int.parse(e.startHour),
|
||||
barRods: [
|
||||
BarChartRodData(
|
||||
color: Colors.blue[900],
|
||||
toY: e.steps.toDouble() / 100,
|
||||
),
|
||||
],
|
||||
final barGroups = hourlySteps
|
||||
.map(
|
||||
(e) => BarChartGroupData(
|
||||
x: int.parse(e.startHour),
|
||||
barRods: [
|
||||
BarChartRodData(
|
||||
color: Colors.blue[900],
|
||||
toY: e.steps.toDouble() / 100,
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
],
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
|
||||
return Scaffold(
|
||||
body: Stack(
|
||||
@@ -99,14 +98,14 @@ class _HomeState extends State<Home> {
|
||||
children: [
|
||||
lastUpdated != null
|
||||
? Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 50.0),
|
||||
child: Text(
|
||||
DateFormat.yMMMMd('en_US').format(lastUpdated!),
|
||||
style: textTheme.titleLarge!.copyWith(
|
||||
color: Colors.blue[900],
|
||||
padding: const EdgeInsets.symmetric(vertical: 50.0),
|
||||
child: Text(
|
||||
DateFormat.yMMMMd('en_US').format(lastUpdated!),
|
||||
style: textTheme.titleLarge!.copyWith(
|
||||
color: Colors.blue[900],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
)
|
||||
: const SizedBox(height: 0),
|
||||
Text(
|
||||
hourlySteps.fold(0, (t, e) => t + e.steps).toString(),
|
||||
|
||||
@@ -45,10 +45,11 @@ class _IOSStepsRepo implements StepsRepo {
|
||||
final dylib = ffi.DynamicLibrary.open("pedometer.framework/pedometer");
|
||||
|
||||
// Initialize the Dart API
|
||||
final initializeApi = dylib.lookupFunction<
|
||||
ffi.IntPtr Function(ffi.Pointer<ffi.Void>),
|
||||
int Function(ffi.Pointer<ffi.Void>)
|
||||
>('Dart_InitializeApiDL');
|
||||
final initializeApi = dylib
|
||||
.lookupFunction<
|
||||
ffi.IntPtr Function(ffi.Pointer<ffi.Void>),
|
||||
int Function(ffi.Pointer<ffi.Void>)
|
||||
>('Dart_InitializeApiDL');
|
||||
|
||||
final initializeResult = initializeApi(ffi.NativeApi.initializeApiDLData);
|
||||
if (initializeResult != 0) {
|
||||
@@ -106,8 +107,9 @@ class _IOSStepsRepo implements StepsRepo {
|
||||
) {
|
||||
if (result != null) {
|
||||
final stepCount = result.numberOfSteps.intValue;
|
||||
final startHour =
|
||||
hourFormatter.stringFromDate_(result.startDate).toString();
|
||||
final startHour = hourFormatter
|
||||
.stringFromDate_(result.startDate)
|
||||
.toString();
|
||||
completer.complete(Steps(startHour, stepCount));
|
||||
} else {
|
||||
debugPrint("Query error: ${error?.localizedDescription}");
|
||||
@@ -136,8 +138,8 @@ class _AndroidStepsRepo implements StepsRepo {
|
||||
// ignore: invalid_use_of_internal_member
|
||||
activity = hc.Activity.fromReference(jni.Jni.getCurrentActivity());
|
||||
applicationContext =
|
||||
// ignore: invalid_use_of_internal_member
|
||||
hc.Context.fromReference(jni.Jni.getCachedApplicationContext());
|
||||
// ignore: invalid_use_of_internal_member
|
||||
hc.Context.fromReference(jni.Jni.getCachedApplicationContext());
|
||||
client = hc.HealthConnectClient.getOrCreate$1(applicationContext);
|
||||
}
|
||||
|
||||
@@ -147,10 +149,18 @@ class _AndroidStepsRepo implements StepsRepo {
|
||||
final now = DateTime.now();
|
||||
|
||||
for (var h = 0; h <= now.hour; h++) {
|
||||
final start =
|
||||
DateTime(now.year, now.month, now.day, h).millisecondsSinceEpoch;
|
||||
final end =
|
||||
DateTime(now.year, now.month, now.day, h + 1).millisecondsSinceEpoch;
|
||||
final start = DateTime(
|
||||
now.year,
|
||||
now.month,
|
||||
now.day,
|
||||
h,
|
||||
).millisecondsSinceEpoch;
|
||||
final end = DateTime(
|
||||
now.year,
|
||||
now.month,
|
||||
now.day,
|
||||
h + 1,
|
||||
).millisecondsSinceEpoch;
|
||||
final request = hc.AggregateRequest(
|
||||
{
|
||||
hc.StepsRecord.COUNT_TOTAL,
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
name: pedometer_example
|
||||
description: Demonstrates how to use the pedometer plugin.
|
||||
version: 1.0.0+1
|
||||
resolution: workspace
|
||||
|
||||
# The following line prevents the package from being accidentally published to
|
||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
@@ -16,10 +19,10 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
# In Windows, build-name is used as the major, minor, and patch parts
|
||||
# of the product and file versions while build-number is used as the build suffix.
|
||||
version: 1.0.0+1
|
||||
|
||||
|
||||
environment:
|
||||
sdk: ^3.7.0-0
|
||||
sdk: ^3.9.0-0
|
||||
|
||||
# Dependencies specify other packages that your package needs in order to work.
|
||||
# To automatically upgrade your package dependencies to the latest versions
|
||||
@@ -41,10 +44,12 @@ dependencies:
|
||||
|
||||
ffi: ^2.1.2
|
||||
intl: ^0.20.0
|
||||
jni: ^0.13.0
|
||||
fl_chart: ^0.70.0
|
||||
jni: ^0.14.2
|
||||
fl_chart: ^1.0.0
|
||||
|
||||
dev_dependencies:
|
||||
analysis_defaults:
|
||||
path: ../../analysis_defaults
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
|
||||
@@ -53,7 +58,7 @@ dev_dependencies:
|
||||
# activated in the `analysis_options.yaml` file located at the root of your
|
||||
# package. See that file for information about deactivating specific lint
|
||||
# rules and activating additional ones.
|
||||
flutter_lints: ^5.0.0
|
||||
flutter_lints: ^6.0.0
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
# following page: https://dart.dev/tools/pub/pubspec
|
||||
|
||||
@@ -235,8 +235,8 @@ final class $HealthConnectClient$Companion$NullableType
|
||||
@core$_.override
|
||||
HealthConnectClient$Companion? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: HealthConnectClient$Companion.fromReference(reference);
|
||||
? null
|
||||
: HealthConnectClient$Companion.fromReference(reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectType();
|
||||
@@ -828,10 +828,9 @@ class HealthConnectClient extends jni$_.JObject {
|
||||
final $o = jni$_.JGlobalReference(
|
||||
jni$_.JObjectPtr.fromAddress(await $p.first),
|
||||
);
|
||||
final $k =
|
||||
const jni$_.JListType<jni$_.JObject>(
|
||||
jni$_.JObjectType(),
|
||||
).jClass.reference;
|
||||
final $k = const jni$_.JListType<jni$_.JObject>(
|
||||
jni$_.JObjectType(),
|
||||
).jClass.reference;
|
||||
if (!jni$_.Jni.env.IsInstanceOf($o.pointer, $k.pointer)) {
|
||||
$k.release();
|
||||
throw 'Failed';
|
||||
@@ -887,10 +886,9 @@ class HealthConnectClient extends jni$_.JObject {
|
||||
final $o = jni$_.JGlobalReference(
|
||||
jni$_.JObjectPtr.fromAddress(await $p.first),
|
||||
);
|
||||
final $k =
|
||||
const jni$_.JListType<jni$_.JObject>(
|
||||
jni$_.JObjectType(),
|
||||
).jClass.reference;
|
||||
final $k = const jni$_.JListType<jni$_.JObject>(
|
||||
jni$_.JObjectType(),
|
||||
).jClass.reference;
|
||||
if (!jni$_.Jni.env.IsInstanceOf($o.pointer, $k.pointer)) {
|
||||
$k.release();
|
||||
throw 'Failed';
|
||||
@@ -2179,8 +2177,8 @@ final class $PermissionController$Companion$NullableType
|
||||
@core$_.override
|
||||
PermissionController$Companion? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: PermissionController$Companion.fromReference(reference);
|
||||
? null
|
||||
: PermissionController$Companion.fromReference(reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectType();
|
||||
@@ -2313,10 +2311,9 @@ class PermissionController extends jni$_.JObject {
|
||||
final $o = jni$_.JGlobalReference(
|
||||
jni$_.JObjectPtr.fromAddress(await $p.first),
|
||||
);
|
||||
final $k =
|
||||
const jni$_.JSetType<jni$_.JObject>(
|
||||
jni$_.JObjectType(),
|
||||
).jClass.reference;
|
||||
final $k = const jni$_.JSetType<jni$_.JObject>(
|
||||
jni$_.JObjectType(),
|
||||
).jClass.reference;
|
||||
if (!jni$_.Jni.env.IsInstanceOf($o.pointer, $k.pointer)) {
|
||||
$k.release();
|
||||
throw 'Failed';
|
||||
@@ -3599,8 +3596,8 @@ final class $TimeRangeFilter$Companion$NullableType
|
||||
@core$_.override
|
||||
TimeRangeFilter$Companion? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: TimeRangeFilter$Companion.fromReference(reference);
|
||||
? null
|
||||
: TimeRangeFilter$Companion.fromReference(reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectType();
|
||||
@@ -10754,8 +10751,8 @@ final class $Intent$FilterComparison$NullableType
|
||||
@core$_.override
|
||||
Intent$FilterComparison? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: Intent$FilterComparison.fromReference(reference);
|
||||
? null
|
||||
: Intent$FilterComparison.fromReference(reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectNullableType();
|
||||
@@ -11044,8 +11041,8 @@ final class $Intent$ShortcutIconResource$NullableType
|
||||
@core$_.override
|
||||
Intent$ShortcutIconResource? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: Intent$ShortcutIconResource.fromReference(reference);
|
||||
? null
|
||||
: Intent$ShortcutIconResource.fromReference(reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectNullableType();
|
||||
@@ -29213,8 +29210,8 @@ final class $AggregateGroupByDurationRequest$NullableType
|
||||
@core$_.override
|
||||
AggregateGroupByDurationRequest? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: AggregateGroupByDurationRequest.fromReference(reference);
|
||||
? null
|
||||
: AggregateGroupByDurationRequest.fromReference(reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectType();
|
||||
@@ -29431,8 +29428,8 @@ final class $AggregateGroupByPeriodRequest$NullableType
|
||||
@core$_.override
|
||||
AggregateGroupByPeriodRequest? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: AggregateGroupByPeriodRequest.fromReference(reference);
|
||||
? null
|
||||
: AggregateGroupByPeriodRequest.fromReference(reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectType();
|
||||
@@ -30137,8 +30134,8 @@ final class $ReadRecordsRequest$NullableType<$T extends jni$_.JObject>
|
||||
@core$_.override
|
||||
ReadRecordsRequest<$T>? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: ReadRecordsRequest<$T>.fromReference(T, reference);
|
||||
? null
|
||||
: ReadRecordsRequest<$T>.fromReference(T, reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectType();
|
||||
@@ -30722,8 +30719,8 @@ final class $AggregateMetric$AggregationType$NullableType
|
||||
@core$_.override
|
||||
AggregateMetric$AggregationType? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: AggregateMetric$AggregationType.fromReference(reference);
|
||||
? null
|
||||
: AggregateMetric$AggregationType.fromReference(reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectType();
|
||||
@@ -30853,8 +30850,8 @@ final class $AggregateMetric$Companion$NullableType
|
||||
@core$_.override
|
||||
AggregateMetric$Companion? fromReference(jni$_.JReference reference) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: AggregateMetric$Companion.fromReference(reference);
|
||||
? null
|
||||
: AggregateMetric$Companion.fromReference(reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectType();
|
||||
@@ -31054,13 +31051,9 @@ final class $AggregateMetric$Converter$FromDouble$NullableType<
|
||||
@core$_.override
|
||||
AggregateMetric$Converter$FromDouble<$R>? fromReference(
|
||||
jni$_.JReference reference,
|
||||
) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: AggregateMetric$Converter$FromDouble<$R>.fromReference(
|
||||
R,
|
||||
reference,
|
||||
);
|
||||
) => reference.isNull
|
||||
? null
|
||||
: AggregateMetric$Converter$FromDouble<$R>.fromReference(R, reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectNullableType();
|
||||
@@ -31270,10 +31263,9 @@ final class $AggregateMetric$Converter$FromLong$NullableType<
|
||||
@core$_.override
|
||||
AggregateMetric$Converter$FromLong<$R>? fromReference(
|
||||
jni$_.JReference reference,
|
||||
) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: AggregateMetric$Converter$FromLong<$R>.fromReference(R, reference);
|
||||
) => reference.isNull
|
||||
? null
|
||||
: AggregateMetric$Converter$FromLong<$R>.fromReference(R, reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectNullableType();
|
||||
@@ -31507,10 +31499,9 @@ final class $AggregateMetric$Converter$NullableType<
|
||||
@core$_.override
|
||||
AggregateMetric$Converter<$T, $R>? fromReference(
|
||||
jni$_.JReference reference,
|
||||
) =>
|
||||
reference.isNull
|
||||
? null
|
||||
: AggregateMetric$Converter<$T, $R>.fromReference(T, R, reference);
|
||||
) => reference.isNull
|
||||
? null
|
||||
: AggregateMetric$Converter<$T, $R>.fromReference(T, R, reference);
|
||||
@jni$_.internal
|
||||
@core$_.override
|
||||
jni$_.JObjType get superType => const jni$_.JObjectNullableType();
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,23 +2,26 @@ name: pedometer
|
||||
description: A new Flutter FFI plugin project.
|
||||
version: 0.0.1
|
||||
publish_to: none
|
||||
resolution: workspace
|
||||
|
||||
environment:
|
||||
sdk: ^3.7.0-0
|
||||
sdk: ^3.9.0-0
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
plugin_platform_interface: ^2.1.8
|
||||
jni: ^0.13.0
|
||||
jni: ^0.14.2
|
||||
ffi: ^2.1.2
|
||||
|
||||
dev_dependencies:
|
||||
ffigen: ^16.0.0
|
||||
jnigen: ^0.13.1
|
||||
analysis_defaults:
|
||||
path: ../analysis_defaults
|
||||
ffigen: ^19.1.0
|
||||
jnigen: ^0.14.2
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
flutter_lints: ^5.0.0
|
||||
flutter_lints: ^6.0.0
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
# following page: https://dart.dev/tools/pub/pubspec
|
||||
|
||||
Reference in New Issue
Block a user