Why can't my Flutter App talk directly to the Database.
Well technically it can, but you shouldn't. The first problem is security. If your Flutter App is going to connect to the database then it will need an account on the database with a username and password. Most database permission models are fairly simplistic. You can say that a user has access to a given table (tblAccount) but you can't say that a user only has access to their own rows in the table. This means that any of your Flutter users can potentially see the full set of accounts stored in tblAccount. For the Flutter App to access the db, it must either store the u/p as an asset/string in the app or you must ask the user to enter the u/p. If it's stored in your app then it's a fairly simple process to extract those details from the app binary. Either way this is considered a completely insecure method of providing access to your db.
The next problem is connection limits. DB's aren't really designed to accept 10s of thousands of short lived connections as each connection uses a large amount of memory and establishing a new connection is time consuming. On the other hand, Application Servers are designed to handle lots of short lived connections.