Repository: flutter
Issue: PageView with padEnds = false means you can't change to end page items
Labels: framework,f: scrolling,has reproducible steps,P3,found in release: 3.3,found in release: 3.6,team-framework,triaged-framework

If a `PageView` has pages that don't use the entire viewport (`viewportFraction < 1.0`), and `padEnds` is `false`, then it's not possible to scroll to the end items in the list. They'll be visible, but the "current" page will always be the left-most page (see attached image).

If `padEnds` is `true`, then the current page will be centered and it's possible to scroll to each page.

Despite the scroll being blocked, perhaps it should still be possible to move the current page? i.e. make it possible for `onPageChanged` to get triggered for each page.

## Steps to Reproduce

<!-- Please include full steps to reproduce so that we can reproduce the problem. -->

1. Execute `flutter run` on the code sample <!-- (see "Code sample" section below) -->
2. Scroll to the right
3. You can never "select" the end items (depending on screen width) - i.e. `onPageChanged` will never run for the end items, nor will `animateTo()`, `nextPage()` etc work (see attached image)

**Expected results:**

Once the `PageView` has reached its limits and can no longer scroll, the current page should still move over (i.e. not be the left-most item)

**Actual results:**

Scrolling stops once the right-most limits are hit, which means you can see the end pages, but never actually "select" them (`onPageChanged`) will never trigger for them.

<details>
<summary>Code sample</summary>

```dart
import 'package:flutter/material.dart';
import 'dart:ui';

const Color darkBlue = Color.fromARGB(255, 18, 32, 47);

void main() {
  runApp(MyApp());
}

class AppScrollBehavior extends MaterialScrollBehavior {
  @override
  Set<PointerDeviceKind> get dragDevices => {
        PointerDeviceKind.touch,
        PointerDeviceKind.mouse,
      };
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(
        scaffoldBackgroundColor: darkBlue,
      ),
      debugShowCheckedModeBanner: false,
      scrollBehavior: AppScrollBehavior(),
      home: Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatefulWidget {

  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  final _nums = [1, 2, 3, 4, 5];
  int _currIndex = 0;
  final _controller = PageController(
    viewportFraction: 0.25,
  );

  _onChangePage(int index) {
    setState(() {
      _currIndex = index;
    });
  }
  
  @override
  Widget build(BuildContext context) {
    return PageView.builder(
        padEnds: false,
        controller: _controller,
        onPageChanged: _onChangePage,
        itemCount: _nums.length,
        itemBuilder: (context, index) {
          return CircleAvatar(
            backgroundColor: (_currIndex == index) ? Colors.red : Colors.blue,
            child: Text("${_nums[index]}",
                       style: const TextStyle(color: Colors.white),),
          );
        }
      );
  }
}
```

</details>

<details>
  <summary>Logs</summary>

<!--
      Run your application with `flutter run --verbose` and attach all the
      log output below between the lines with the backticks. If there is an
      exception, please see if the error message includes enough information
      to explain how to solve the issue. If there is a crash, please include
      the entirety of the crash log including the backtrace.
-->

```
no logs of note
```

<!--
     Run `flutter analyze` and attach any output of that command below.
     If there are any analysis errors, try resolving them before filing this issue.
-->

```
nothing of note
```

<!-- Finally, paste the output of running `flutter doctor -v` here. -->

```
[√] Flutter (Channel stable, 3.3.8, on Microsoft Windows [Version 10.0.19044.2251], locale en-GB)
    • Flutter version 3.3.8 on channel stable at C:\Users\d.connolly\Documents\Dev\flutter_windows_3.0.1-stable\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 52b3dc25f6 (12 days ago), 2022-11-09 12:09:26 +0800
    • Engine revision 857bd6b74c
    • Dart version 2.18.4
    • DevTools version 2.15.0

[√] Android toolchain - develop for Android devices (Android SDK version 33.0.0) 
    • Android SDK at C:\Users\d.connolly\Documents\Dev\AndroidSDK
    • Platform android-33, build-tools 33.0.0
    • ANDROID_HOME = C:\Users\d.connolly\Documents\Dev\AndroidSDK
    • Java binary at: C:\Program Files\Common Files\Oracle\Java\javapath\java.exe
    • Java version Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[X] Visual Studio - develop for Windows
    X Visual Studio not installed; this is necessary for Windows development.
      Download at https://visualstudio.microsoft.com/downloads/.
      Please install the "Desktop development with C++" workload, including all of its default components

[!] Android Studio (not installed)
    • Android Studio not found; download from https://developer.android.com/studio/index.html
      (or visit https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions).

[√] VS Code (version 1.70.0)
    • VS Code at C:\Users\d.connolly\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.52.0

[√] Connected device (3 available)
    • Windows (desktop) • windows  • windows-x64    • Microsoft Windows [Version 10.0.19044.2251]
    • Chrome (web)      • chrome   • web-javascript • Google Chrome 107.0.5304.107
    • Edge (web)        • edge     • web-javascript • Microsoft Edge 107.0.1418.35

[√] HTTP Host Availability
    • All required HTTP hosts are available
```

</details>


<!--
      Consider also attaching screenshots and/or videos to better
      illustrate the issue.

      You can upload them directly on GitHub.
      Beware that video file size is limited to 10MB.
-->
![pageview_bug](https://user-images.githubusercontent.com/179882/203060684-16233bba-7f07-40c5-ade0-533cc76f00e5.png)